测试函数参数为列名时

问题描述 投票:0回答:1

我有以下代码和功能:

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 的答案。 上面的代码只是一个例子。问题是关于测试功能,而不是关于该代码的有用性。

function dplyr arguments
1个回答
0
投票

你必须将

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
© www.soinside.com 2019 - 2024. All rights reserved.