我有以下代码和功能:
library(tidyverse)
set.seed(12)
data_table <- tibble(
a = sample(100),
b = rep(c("group_1", "group_2", "group_3", "group_4"), each = 25),
c = rep(c("group_A", "group_B", "group_C", "group_D"), times = 25),
)
mean_fct <- function(data, grouped_var){
data %>%
group_by({{grouped_var}}) %>%
mutate(mean_a = mean(a)) %>%
ungroup() %>%
distinct(mean_a, {{grouped_var}})
}
grouped_by_number <- mean_fct(data_table, b)
grouped_by_letter <- mean_fct(data_table, c)
现在,我想通过给它一些参数来测试函数的特定部分,即我想做:
data <- data_table
grouped_var <- b
data %>%
group_by({{grouped_var}}) %>%
mutate(mean_a = mean(a))
这不起作用,错误是“错误:找不到对象'b'”
我明白为什么它不起作用,因为参数是 tibble 的列名,但是,我如何测试函数的这样一个特定部分,即如何临时存储参数?
非常感谢您的帮助。我真的很喜欢 dplyr 的答案。 上面的代码只是一个例子。问题是关于测试功能,而不是关于该代码的有用性。
你必须将
col b
作为小标题的一栏
grouped_var <- data_table$b
我从
group_by
mutate
得到这个输出:
a b c `<chr>` mean_a
<int> <chr> <chr> <chr> <dbl>
1 66 group_1 group_A group_1 61.1
2 90 group_1 group_B group_1 61.1
3 80 group_1 group_C group_1 61.1
4 91 group_1 group_D group_1 61.1
5 46 group_1 group_A group_1 61.1
6 69 group_1 group_B group_1 61.1
7 95 group_1 group_C group_1 61.1
8 92 group_1 group_D group_1 61.1
9 34 group_1 group_A group_1 61.1
10 8 group_1 group_B group_1 61.1
# ℹ 90 more rows