3

現在、 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.

これは私の2回目の試みで、クォーシュアを使用しようとしています:

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 ="

これは quosures と:=演算子を使用しようとする私の 3 回目の試みです。

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
4

2 に答える 2