运行后:
x <- as.name("aa")
aa <- 2
在 R 中,为什么不
(x)
返回2?为什么不
x <- as.name("aa")
aa <- 3
get(get(x))
返回 3?
我知道 get() 需要一个字符串,但我不明白为什么它不计算 x,找到里面的字符串,然后得到它。在我看来,有时函数会对它们的参数进行这样的评估,有时则不会。例如,在第二个示例中,如果将 get(get(x)) 替换为 eval(x),则 eval() 会计算 x 以找到名称,然后计算名称以找到 3。
最佳答案
因为x
的值不是 2,它是符号(或名称)aa
.但是,如果您eval
它:
> eval(x)
[1] 2
同样,
get(x)
根本不起作用(即产生错误),因为根据 get
的文档,它的第一个参数必须是 an object name (given as a character string)
,其中括号是为了将其与符号/名称区分开来。get
仅适用于字符参数: > get("aa")
[1] 2
还有一个
symbol
(我发现它比 name
更容易混淆)不是一回事:> identical("aa",as.name("aa"))
[1] FALSE
(
as.name
和 as.symbol
做同样的事情。)有关我在下面的评论中提到的“表达式求值”与“函数参数求值”区别的出色解释,请参阅@MrFlick 的回答。
关于r - 在 R 中,究竟是什么导致了名称(或符号)类型的对象被求值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37062490/