6

伙计们,这让我发疯。

这按预期工作:

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弄到表达的原始形式的?

4

1 回答 1

8

因为当您打印时,fun它实际上是函数的打印源(请参阅attributes(fun)),它不是由substitute.

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

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

或比较:

print.function(fun, useSource=FALSE)
# function () 
# 32 + 33
print.function(fun, useSource=TRUE) # Which is default
# function() a+ b
于 2010-11-02T15:10:38.067 回答