我正在尝试在dplyr
中对列对应的函数进行应用。在下面的简单示例中,有列a
和b
,以及a_exp
和b_exp
。我想创建一个名为a_mul = a*a_exp
的新列,以及另一个用于b(和c、d、e...)。我知道可以使用循环和函数、purrr
或pivot_longer
来解决这个问题,但我想知道是否可以使用mutate(across())
来解决它。这是一个最小化的示例。实际问题更加复杂,因此我无法一次性创建两个列,因为在实际情况下,a_exp
不是a
的函数。我正在尝试以下代码,并且我得到了
"promise already under evaluation: recursive default argument reference or earlier problems?"
我不明白为什么会出现这种情况,也不知道如何解决它。
test <- tibble(a = runif(10), b = runif(10)) %>%
mutate(across(c(a,b), exp, .names = '{.col}_exp'))
test <- test %>%
mutate(across(c(a,b),
~ .x * .data[[paste0(cur_column(), '_exp')]],
.names = '{.col}_mult'))
a:b
和a_exp:b_exp
成对出现,那么这个可以运行。 - Darren Tsai