将变量名传递给 R 中的函数

2023-12-21

我注意到很多包允许您传递符号名称,这些名称在调用函数的上下文中甚至可能无效。我想知道它是如何工作的以及如何在我自己的代码中使用它?

这是 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(使用前将#替换为@)

将变量名传递给 R 中的函数 的相关文章

随机推荐