Я знаю, используя lazyeval внутри функции для того, чтобы ссылаться на имена столбцов с dplyr, но я застрял. В общем случае при создании функции, которая использует dplyr, который также ссылается на имена столбцов из аргументов функции, что является самым идиоматическим способом достижения этого? Благодарю.Передача имени столбца внутри функции с помощью dplyr
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
Вы должны будете использовать '' summarize_' и filter_' вместо этого. См. Например [здесь] (http://stackoverflow.com/questions/41810320/how-to-correctly-use-dplyr-verbs-inside-a-function-definition-in-r). – Axeman
Спасибо. Кстати, нужно ли использовать ** lazyeval :: interp **? – David