【问题标题】:How does the get function evaluate an argument differently with and without quotes ' 'get 函数如何以不同的方式评估带引号和不带引号的参数 ' '
【发布时间】:2018-10-08 22:14:31
【问题描述】:

我试图了解使用 assign() 和 get() 的不同陷阱。 get() 将以不同方式评估看似相同的对象的一个​​示例如下所示。 首先,我将字符串“This is: ALPHABET”分配给 names.foo 的元素

names.foo <- letters
values.foo <- LETTERS
for (i in 1:length(names.foo)){
assign(names.foo[i], paste("This is: ", values.foo[i]))
}

当我运行 get('names.foo') 时,我得到了预期的原始向量

get('names.foo')
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"

但是当我运行 get(names.foo)(与上面相同但不带引号的命令)时,我得到的似乎是 for 循环中分配给向量 names.foo 的第一个元素的值。

get(names.foo)
[1] "This is:  A"

这是否意味着在 for 循环中分配的第一个元素也具有名称 names.foo ? get() 在这两种情况下到底有什么不同?

【问题讨论】:

  • assign(names.foo[i], paste("This is: ", values.foo[i])),您正在做类似a &lt;- 'This is: a'; b &lt;- 'This is: b'; ... 的事情。通过get(names.foo),您实际上只获得了名为names.foo 的第一个值的变量,即get('a')。

标签: r variables naming-conventions


【解决方案1】:

如果您查看各自的帮助页面,您会发现get 和assign 旨在将给定的变量名称作为字符串。所以命令

get('names.foo') 

是正确的。要了解其中的所有复杂性,我建议阅读 Hadley Wickham 的 Advanced R,可在此处免费获取:http://adv-r.had.co.nz/,特别关注有关表达式的章节。

【讨论】:

    猜你喜欢
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多