是否有基于名称向量添加多列的稳定(未弃用)dplyr 方法?

Is there a stable (non-deprecated) dplyr way of adding multiple columns based on a vector of names?

假设我有一个简单的 data.frame:

> d <- data.frame(A=1, B=2)

现在我想添加 3 列,{X, Y, Z} 存储在一个向量中。 请跳过原因,关注解决方案。

在基础 R 中我可以轻松做到:

> columns_to_add <- c("X", "Y", "Z")
> d[,columns_to_add] <- NA
> d
  A B  X  Y  Z
1 1 2 NA NA NA

但是如何用 dplyr 做到这一点?我知道必须有一个使用 mutate 的组合(记住,mutate_at、mutate_all 总有一天会被弃用)、“:=”赋值运算符和 {{}} 或三连击运算符!!!rlang::syms()?

让我们有:

> single_name <- c("x")
> multip_name <- c("x", "y", "z")

对于单个名称有效:

> d %>% mutate(!!sym(single_name) := NA)
  A B  x
1 1 2 NA
> d %>% mutate({{single_name}} := NA)
  A B  x
1 1 2 NA

但是对于超过 1 个名称,它不起作用:

> d %>% mutate({{multip_name}} := NA)
Error: The LHS of `:=` must be a string or a symbol
Run `rlang::last_error()` to see where the error occurred.

> d %>% mutate(!!!syms(multip_name) := NA)
Error: The LHS of `:=` can't be spliced with `!!!`
Run `rlang::last_error()` to see where the error occurred.

它不一定是“变异”,请提出任何建议:

一种方法可以是:

d %>%
 add_column(!!!setNames(rep(NA, length(multip_name)), multip_name))

  A B  x  y  z
1 1 2 NA NA NA