如何在 dplyr 中使用表达式列表进行变异?

How to use expression list for mutate in dplyr?

我发现通常在 dplyr 中工作的数据屏蔽在与 !! 运算符一起使用时停止工作。

考虑一个简单的例子。

trans <- list(
  a = rlang::expr(val),
  b = rlang::expr(val*2)
)

df <- data.frame(name = c("a", "b"), val = 2:3)

然后,我想使用我的列表 trans 根据 name 中的值修改 val 列。然后,下面的代码将不起作用。

library(dplyr)

df %>%
 rowwise() %>%
 mutate(val = !!trans[[ name ]]) 

似乎找不到 name。如果使用普通变量代替数据框中的 name 列,上面的代码将起作用。

我应该如何修改代码以使其按预期工作?谢谢。

您可以使用 eval :

library(dplyr)

df %>%
  rowwise() %>%
  mutate(val_res = eval(trans[[name]]))

#  name    val val_res
#  <chr> <int>   <dbl>
#1 a         2       2
#2 b         3       6