我知道使用data$column
选择一列数据帧。我的问题-在创建函数并传递数据(columnName
作为参数并返回结果的方式)中,有没有一种动态地做到这一点的方法?
fnGetColumnData (data, columnName) {
data$columnName
}
将代码封装在函数中时,上述不起作用。但是,如果我写data$"columnName"
,它就可以工作。有没有办法封装这个?
答案 0 :(得分:2)
尝试一下:
select_col<-function(df,colname){
colname<-deparse(substitute(colname))
df[colname]
}
select_col(iris,Species)
答案 1 :(得分:1)
使用dplyr
和rlang
:
library(dplyr)
library(rlang)
fnGetColumnData = function(data, columnName){
colname_quo = enquo(columnName)
pull(data, !!colname_quo)
}
输出:
> fnGetColumnData(mtcars, "cyl")
[1] 6 6 4 6 8 6 8 4 4 6 6 8 8 8 8 8 8 4 4 4 4 8 8 8 8 4 4 4 8 6 8 4
> fnGetColumnData(mtcars, cyl)
[1] 6 6 4 6 8 6 8 4 4 6 6 8 8 8 8 8 8 4 4 4 4 8 8 8 8 4 4 4 8 6 8 4