gpt4 book ai didi

function - R 中 `substitute` 的令人困惑的行为

转载 作者:行者123 更新时间:2023-12-03 06:31:11 24 4
gpt4 key购买 nike

伙计们,这让我发疯。

这按预期工作:

eobj <- substitute(obj <- list(a, b), list(a = 32, b = 33))
eval(eobj)
obj
[[1]]
[1] 32

[[2]]
[1] 33

现在,试试这个:

efun <- substitute(fun <- function() a+ b, list(a = 32, b = 33))
str(efun)
# language fun <- function() 32 + 33
eval(efun)
fun
# function() a+ b

这是怎么回事? eval 到底是如何获得表达式的原始形式的?

最佳答案

因为当你打印fun时,它实际上是打印函数的源代码(参见attributes(fun)),它不会被substitute修改。

请注意,当您在全局工作区中定义 ab 时,函数结果是相同的。

您可以通过body(fun)看到函数的实际代码。

或者比较:

print.function(fun, useSource=FALSE)
# function ()
# 32 + 33
print.function(fun, useSource=TRUE) # Which is default
# function() a+ b

关于function - R 中 `substitute` 的令人困惑的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4078825/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com