我有一个总结变量的自定义函数。我简化了函数来说明我的问题,即它比下面显示的更复杂。请注意,函数的一般结构应该保持不变:它需要一个参数来指定要在哪个数据帧上工作 ( df
),以及一个参数来总结哪个变量 ( variable_to_test
)。
my_fun <- function(df, variable_to_test) {
variable_to_test <- enquo(variable_to_test)
new_var_name <- paste0(quo_name(variable_to_test), "_new_name")
df %>%
summarise(
!!new_var_name := sum(!!variable_to_test, na.rm = TRUE)
)
}
使用示例,我可以将函数应用于数据框中的每个变量:
library(tidyverse)
dat <- tibble(
variable_1 = c(1:5, NA, NA, NA, NA, NA),
variable_2 = c(NA, NA, NA, NA, NA, 11:15)
)
> my_fun(dat, variable_1)
# A tibble: 1 x 1
variable_1_new_name
<int>
1 15
> my_fun(dat, variable_2)
# A tibble: 1 x 1
variable_2_new_name
<int>
1 65
但是:如何列出在数据框中的所有列上应用该函数?我试过了
> dat %>%
+ lapply(., my_fun)
Error in duplicate(quo) : argument "quo" is missing, with no default
Called from: duplicate(quo)
但这会返回错误。我正在努力解决该函数为要处理的数据框和要汇总的变量的参数这一事实。请注意,我想保留这个结构——我发现将数据框的名称传递给函数而不是仅仅给函数提供变量名并将数据框“硬编码”到函数体中更优雅。有人知道如何使用lapply()
该功能吗?