我注意到很多程序包允许你传递符号名称,即使在调用函数的上下文中可能无效。 我想知道这是如何工作的,以及如何在我的代码中使用它?
以下是ggplot2的一个示例:
a <- data.frame(x=1:10,y=1:10)
library(ggplot2)
qplot(data=a,x=x,y=y)
x
和 y
不在我的命名空间中,但 ggplot 理解它们是数据框的一部分,并将它们的评估推迟到它们有效的上下文中。我尝试过做同样的事情:
b <- function(data,name) { within(data,print(name)) }
b(a,x)
然而,这个方法彻底失败了:
Error in print(name) : object 'x' not found
我做错了什么?这个怎么工作?
注意: 这不是在 R 中将变量名传递给函数的重复问题
var <- eval(substitute(var), data)
给你对象,那么var.name <- substitute(var)
将会给你传递到函数中的变量名。 - drstevok