将字符串传递给 R 函数参数,但稍后用作另一个函数的参数名称
pass a string to an R function argument but later use as another function's argument name
在我的数据分析中,有许多变量我希望最终用户在 R 函数中指定为参数值:
myFun = function(var.name = "age") { ... }
在这个 myFun
函数中,我还想使用 var.name
作为 dplyr
中数据框 dat1
:
的子集参数
dat1.level1 = filter(dat1, var.name == ">18")
dat1.level2 = filter(dat1, var.name == "<=18")
不知道用户什么时候给var.name
传了一个字符串比如"age"也是dataframe的列名,以后怎么用这个var.name
为了将来的子集化(如上所述)?非常感谢!
您必须使用非标准评估调用的替代方法。以下是您的操作方法
library(dplyr)
library(lazyeval)
myFun <- function(var.name = "cyl") {
print(var.name)
mtcars %>% filter_(.dots=interp(~x==4, x=as.name(var.name)))
}
myFun()
myFun("carb")
有关此主题的更多信息,请参阅 dplyr 附带的小插图:vignette("nse")
在我的数据分析中,有许多变量我希望最终用户在 R 函数中指定为参数值:
myFun = function(var.name = "age") { ... }
在这个 myFun
函数中,我还想使用 var.name
作为 dplyr
中数据框 dat1
:
dat1.level1 = filter(dat1, var.name == ">18")
dat1.level2 = filter(dat1, var.name == "<=18")
不知道用户什么时候给var.name
传了一个字符串比如"age"也是dataframe的列名,以后怎么用这个var.name
为了将来的子集化(如上所述)?非常感谢!
您必须使用非标准评估调用的替代方法。以下是您的操作方法
library(dplyr)
library(lazyeval)
myFun <- function(var.name = "cyl") {
print(var.name)
mtcars %>% filter_(.dots=interp(~x==4, x=as.name(var.name)))
}
myFun()
myFun("carb")
有关此主题的更多信息,请参阅 dplyr 附带的小插图:vignette("nse")