如果if else语句中的x是函数,我该如何计算?
library(dplyr)
stat_mtcars <- function(x) {
if (x == mean) {
wht_stat <- "Mean"
} else if(x == sd) {
wht_stat <- "sd"
} else if(x == median) {
wht_stat <- "Median"
}
output <- mtcars %>%
summarise(wht_stat = x(mpg))
output
}
stat_mtcars(mean)发布于 2020-10-31 09:17:56
您不需要做任何特殊的事情,您可以直接传递函数名并应用它们。
library(dplyr)
library(rlang)
stat_mtcars <- function(x) {
fun <- deparse(substitute(x))
mtcars %>%
summarise(!!paste0(fun, '_stat') := x(mpg))
}
stat_mtcars(mean)
# mean_stat
#1 20.09062
#Check output
mtcars %>%
summarise(wht_stat = mean(mpg))
# wht_stat
#1 20.09062
stat_mtcars(sd)
# sd_stat
#1 6.026948发布于 2020-10-31 09:19:39
我们可以使用rlang来帮助:
library(dplyr)
library(rlang)
stat_mtcars <- function(x) {
output <- mtcars %>%
summarise({{x}} := x(mpg))
output
}
stat_mtcars(mean)
## mean
## 1 20.09062对于这个问题,我们可以使用deparse(substitute(x))来使用提供给函数的内容。
is_mean = function(x) {
x_sub = substitute(x)
deparse(x_sub) == 'mean'
}
is_mean(mean)
#> [1] TRUE
is_mean(meany)
#> [1] FALSEhttps://stackoverflow.com/questions/64617501
复制相似问题