我已经阅读了几篇关于使用dplyr进行编程的指南,但我仍然对如何解决使用非标准评估(NSE)评估构建/连接字符串的问题感到困惑。我意识到有比使用NSE更好的解决方案,但我想学习如何使用它。
t <- tibble( x_01 = c(1, 2, 3), x_02 = c(4, 5, 6))
i <- 1
这是我期望得到的结果,但希望在
mutate()
中构建变量:t %>% mutate(d_01 = x_01 * 2)
#> A tibble: 3 x 3
#> x_01 x_02 d_01
#> <dbl> <dbl> <dbl>
#> 1 1.00 4.00 2.00
#> 2 2.00 5.00 4.00
#> 3 3.00 6.00 6.00
这是我第一次尝试使用字符串:
new <- sprintf("d_%02d", i)
var <- sprintf("x_%02d", i)
t %>% mutate(new = var * 2)
#> Error in mutate_impl(.data, dots) :
#> Evaluation error: non-numeric argument to binary operator.
这是我第二次尝试使用quosures(引用):
new <- rlang::quo(sprintf("d_%02d", i))
var <- rlang::quo(sprintf("x_%02d", i))
t %>% mutate(!!new = !!var * 2)
#> Error: unexpected '=' in "t %>% mutate(!!new ="
这是我第三次尝试使用引号和 :=
运算符:
new <- rlang::quo(sprintf("d_%02d", i))
var <- rlang::quo(sprintf("x_%02d", i))
t %>% mutate(!!new := !!var * 2)
#> Error in var * 2 : non-numeric argument to binary operator
sym()
是吗? - Jeffrey Girardsym
。 - G. Grothendieck