我正在尝试在数据帧上运行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 两个给出了相同的错误:
> 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