【发布时间】:2020-11-19 09:08:04
【问题描述】:
如果我做这个例子
match_caller <- function(x) 1L
crazy_function <- function(x) substitute(match_caller(x),list(x=x))
crazy_function2 <- function(x) substitute(match_caller(x))
a <- 10L
crazy_function(a^2)
#> match_caller(100)
crazy_function2(a^2)
#> match_caller(a^2)
这似乎表明,通过使用带有列表而不是 env 的替换,其优点是它在替换之前评估变量。总是这样吗?
现在,如果我想在替换之前进行评估,出于安全原因,我使用force,但这没用吗?
谢谢
【问题讨论】:
-
我会说你不需要
force。从?substitute中的示例可以看出,这正是您应该如何使用substitute。另外,作为记录,如果match_caller <- fuction(x) 1,您将得到完全相同的结果。所以包装函数没有区别。 -
@Edo 嗨,是的,谢谢你的评论。我放了匹配电话,因为我想这样做是为了捕捉评估的电话。但我会把你的通知放在我的简单例子中。我认为
?substitute不清楚它是否评估列表 arg。
标签: r list lazy-evaluation substitution