问题:
我想以across()
编程方式使用,以便如果将例如NULL
或一个空字符串传递给它,则该函数不会失败。这可能是使用函数的范围变体,例如group_by_at()
,但我希望使用across()
.
另请注意,across()
如果留空,当前将影响所有列。我不确定这样做的动机是什么;对我来说,如果没有列受到影响会更有意义。
例子
这是一个使用函数计算变量均值的快速示例y
。传递分组变量适用于group_by_at()
,但不适用于across()
如下所示:
my_df <- tibble("x" = c("a", "a", "b", "b"), y = 1:4)
compute_mean1 <- function(df, grouping) { # compute grouped mean with across()
df %>%
group_by(across(all_of(grouping))) %>%
summarise(y = mean(y), .groups = "drop")
}
compute_mean2 <- function(df, grouping) { # compute grouped mean with group_by_at()
df %>%
group_by_at(grouping) %>%
summarise(y = mean(y), .groups = "drop")
}
compute_mean1(my_df, "x")
#> # A tibble: 2 x 2
#> x y
#> <chr> <dbl>
#> 1 a 1.5
#> 2 b 3.5
compute_mean1(my_df, NULL)
#> Error: `vars` must be a character vector.
compute_mean2(my_df, "x")
#> # A tibble: 2 x 2
#> x y
#> <chr> <dbl>
#> 1 a 1.5
#> 2 b 3.5
compute_mean2(my_df, NULL)
#> # A tibble: 1 x 1
#> y
#> <dbl>
#> 1 2.5
由reprex 包于 2020-07-14 创建(v0.3.0)