我注意到很多包允许您传递符号名称,这些名称在调用函数的上下文中甚至可能无效。我想知道它是如何工作的以及如何在我自己的代码中使用它?
这是 ggplot2 的示例:
a <- data.frame(x=1:10,y=1:10)
library(ggplot2)
qplot(data=a,x=x,y=y)
x
and y
我的命名空间中不存在,但 ggplot 知道它们是数据框的一部分,并将它们的评估推迟到它们有效的上下文中。我尝试过做同样的事情:
b <- function(data,name) { within(data,print(name)) }
b(a,x)
然而,这惨遭失败:
Error in print(name) : object 'x' not found
我究竟做错了什么?这是如何运作的?
Note: 这是not的副本将变量名传递给 r 中的函数 https://stackoverflow.com/questions/2948367/pass-variable-name-to-a-function-in-r
我最近发现了一种我认为更好的传递变量名称的方法。
a <- data.frame(x = 1:10, y = 1:10)
b <- function(df, name){
eval(substitute(name), df)
}
b(a, x)
[1] 1 2 3 4 5 6 7 8 9 10
Update该方法使用非标准评估。我开始解释,但很快意识到哈德利·威克姆做得比我好得多。读这个http://adv-r.had.co.nz/Computing-on-the-language.html http://adv-r.had.co.nz/Computing-on-the-language.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)