使用tidyeval quo()和gather()时出错

时间:2017-07-07 14:45:22

标签: r dplyr tidyr rlang tidyeval

我正在尝试在数据框上运行gather(),并使用!! quo()以编程方式分配.key列名。但我一直得到'错误:列规范无效'。我甚至找到了一张关闭的票据,表明它应该有效(https://github.com/tidyverse/tidyr/issues/293)。

我将回到使用rename_()作为解决方法,但使用更优雅的NSE会更好。

library('tidyverse')
data(mtcars)
my_var <- 'my_col_name'

以下作品,但是是一个单一的小马

> mtcars %>%
   as_tibble %>%
   rownames_to_column('car_make') %>%
   gather(my_col_name, values, -car_make)

# A tibble: 352 x 3
        car_make my_col_name values
           <chr>       <chr>  <dbl>
 1         Mazda RX4         mpg   21.0
 2     Mazda RX4 Wag         mpg   21.0
 3        Datsun 710         mpg   22.8
 4    Hornet 4 Drive         mpg   21.4
 5 Hornet Sportabout         mpg   18.7
 6           Valiant         mpg   18.1
 7        Duster 360         mpg   14.3
 8         Merc 240D         mpg   24.4
 9          Merc 230         mpg   22.8
10          Merc 280         mpg   19.2
# ... with 342 more rows

以下尝试使用tidyeval 2会产生同样的错误:

> mtcars %>%
     as_tibble %>%
     rownames_to_column('car_make') %>%
     gather(!!quo(my_var), values, -car_make)

Error: Invalid column specification

> mtcars %>%
     as_tibble %>%
     rownames_to_column('car_make') %>%
     gather(!!enquo(my_var), values, -car_make)

Error: Invalid column specification

图书馆版本

tidyverse_1.1.1 
dplyr_0.7.0
tidyr_0.6.3
rlang_0.1.1

0 个答案:

没有答案