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 に答える