我正在尝试在数据框上运行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