我正在使用带有公式界面的tidyverse
函数的转义版本版本,当{ - 1}涉及' - '时我遇到了一些问题。
虽然这个块有效:
nest_
类似的内容不适用于select_(mtcars, ~ -cyl)
nest_
x [[i]]< - value中的错误:无效的下标类型'language'
有没有办法让它工作而不需要写下所有剩余的列?
答案 0 :(得分:1)
在你给出的例子中,你真的不需要标准评估版(SE);您可以在没有nest
的情况下使用~
:
library(tidyr)
mtcars %>% nest(-cyl)
#> # A tibble: 3 x 2
#> cyl data
#> <dbl> <list>
#> 1 6 <tibble [7 x 10]>
#> 2 4 <tibble [11 x 10]>
#> 3 8 <tibble [14 x 10]>
如果您的实际案例更复杂且需要SE,请注意tidyverse正在切换到基于rlang的NSE系统,因此*_
版本将是不赞成使用这样的东西:
mtcars %>% nest(-!!rlang::quo(cyl))
#> # A tibble: 3 x 2
#> cyl data
#> <dbl> <list>
#> 1 6 <tibble [7 x 10]>
#> 2 4 <tibble [11 x 10]>
#> 3 8 <tibble [14 x 10]>
或使用字符串,
mtcars %>% nest(-!!rlang::sym('cyl'))
#> # A tibble: 3 x 2
#> cyl data
#> <dbl> <list>
#> 1 6 <tibble [7 x 10]>
#> 2 4 <tibble [11 x 10]>
#> 3 8 <tibble [14 x 10]>
如果你从GitHub安装tidyr,这两个工作都已经完成了。如果你真的想让老式的工作无论如何,你可以让它像以下一样工作:
mtcars %>% nest_('data', names(.)[names(.) != 'cyl'])
#> # A tibble: 3 x 2
#> cyl data
#> <dbl> <list>
#> 1 6 <tibble [7 x 10]>
#> 2 4 <tibble [11 x 10]>
#> 3 8 <tibble [14 x 10]>