r - 在 R 中,究竟是什么导致了名称(或符号)类型的对象被求值?

标签 r arguments evaluation names scoping

运行后:

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.nameas.symbol 做同样的事情。)

有关我在下面的评论中提到的“表达式求值”与“函数参数求值”区别的出色解释,请参阅@MrFlick 的回答。

关于r - 在 R 中,究竟是什么导致了名称(或符号)类型的对象被求值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37062490/

相关文章:

RMarkdown xelatex !缺失和插入

c# - 当调用委托(delegate)时,如何发送用作参数的参数列表?

r - 有条件地修改父函数的行为

scheme - let-forms 如何评估?

prolog - 在 Prolog 中评估术语并编写它

R 环境/哈希表随着增长到数百万而变慢

r - 如何将新的计算变量添加到数据框中

r - ar(1) 非零均值模拟

c - 有没有办法将没有显式命名类型的结构作为参数传递给函数?

arguments - 推送不会将列表修改为函数参数