我想在我的函数中调用dplyr
包的summarise_
,这是我尝试过的,但我对mean
和有所不同Median
函数,我的方法有什么问题?
library(dplyr)
df <- data.frame(A=c(1,2,3))
getMean <- function(df, col) {
col <- as.symbol(col)
df %>%
summarise_(Mean = ~mean(col))
}
getMedian <- function(df, col) {
col <- as.symbol(col)
df %>%
summarise_(Median = ~median(col))
}
getMean(df, 'A')
Mean
1 2
getMedian(df, 'A')
Error: object 'A' not found
最佳答案
我们可以使用lazyeval
library(lazyeval)
library(dplyr)
getMedian <- function(df, col) {
df %>%
summarise_(.dots= list(Median=interp(~median(v), v= as.name(col))))
}
getMedian(df, 'A')
# Median
#1 2
我们可以通过使用函数名称作为参数来使用单个函数来执行平均值
、中位数
等。
getFun <- function(df, col, func) {
FUN <- match.fun(func)
nm1 <- sub('^(.)', '\\U\\1', substitute(func), perl=TRUE)
df %>%
summarise_(interp(~FUN(v), v= as.name(col)))%>%
setNames(., nm1)
}
getFun(df, 'A', median)
# Median
#1 2
getFun(df, 'A', mean)
# Mean
#1 2
getFun(df, 'A', var)
# Var
#1 1
getFun(df, 'A', min)
# Min
#1 1
getFun(df, 'A', max)
# Max
#1 3
关于r - dplyr summarise_评估不规范导致结果不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32340448/