使用`nest_`使用公式引用变量

时间:2017-05-24 15:17:28

标签: r tidyr tidyverse

我正在使用带有公式界面的tidyverse函数的转义版本版本,当{ - 1}涉及' - '时我遇到了一些问题。

虽然这个块有效:

nest_

类似的内容不适用于select_(mtcars, ~ -cyl)

nest_
  

x [[i]]< - value中的错误:无效的下标类型'language'

有没有办法让它工作而不需要写下所有剩余的列?

1 个答案:

答案 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]>