使用dplyr在函数内传递列名
我知道使用lazyeval内部函数来引用带有dplyr的列名,但我被卡住了。一般来说,当创建一个使用dplyr并引用函数参数中的列名的函数时,最惯用的方法是什么?谢谢使用dplyr在函数内传递列名,r,dplyr,lazyeval,R,Dplyr,Lazyeval,我知道使用lazyeval内部函数来引用带有dplyr的列名,但我被卡住了。一般来说,当创建一个使用dplyr并引用函数参数中的列名的函数时,最惯用的方法是什么?谢谢 library(lazyeval) ## Create data frame df0 <- data.frame(x=rnorm(100), y=runif(100)) ########################################## ## Sample mean; this way wor
library(lazyeval)
## Create data frame
df0 <- data.frame(x=rnorm(100), y=runif(100))
##########################################
## Sample mean; this way works
##########################################
df0 %>%
filter(!is.na(x)) %>%
summarize(mean=mean(x))
##########################################
## Sample mean via function; does not work
##########################################
dfSummary2 <- function(df, var_y) {
p <- df %>%
filter(!is.na(as.name(var_y))) %>%
summarize(mean=mean(as.name(var_y)))
return(p)
}
dfSummary(df0, "x")
# mean
# 1 NA
# Warning message:
# In mean.default("x") : argument is not numeric or logical: returning NA
##########################################
## Sample mean via function; also does not work
##########################################
dfSummary <- function(df, var_y) {
p <- df %>%
filter(!is.na(var_y)) %>%
summarize(mean=mean(var_y))
return(p)
}
dfSummary(df0, "x")
# mean
# 1 NA
# Warning message:
# In mean.default("x") : argument is not numeric or logical: returning NA
库(lazyeval)
##创建数据帧
df0%
过滤器(!is.na(x))%>%
汇总(平均值=平均值(x))
##########################################
##样本均值函数;不起作用
##########################################
DFSummary 2%
汇总(平均值=平均值(如名称(变量)))
返回(p)
}
dfSummary(df0,“x”)
#卑鄙
#1 NA
#警告信息:
#默认值(“x”):参数不是数字或逻辑参数:返回NA
##########################################
##样本均值函数;也不起作用
##########################################
dfSummary%
汇总(平均值=平均值(var_y))
返回(p)
}
dfSummary(df0,“x”)
#卑鄙
#1 NA
#警告信息:
#默认值(“x”):参数不是数字或逻辑参数:返回NA
如果使用dplyr
,则使用摘要和过滤器的注释是正确的方向,更多信息可从vignette(“nse”)
获得
尽管存在给定的问题,但这将提供一个使用变量列名的函数,而不需要dplyr
dfSummary <- function(df, var_y) {
mean(df[[var_y]], na.rm = TRUE)
}
dfSummary(df0, "x")
[1] 0.105659
dfSummary(df0, "y")
[1] 0.4948618
dfSummary您必须使用summary\u
和filter\u
。例如,见。谢谢。顺便问一下,是否需要使用lazyeval::interp?谢谢。我实际上知道这种方法,但由于我的脚本广泛使用dplyr,我希望保留它的功能。