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

Quoting variables with the formula using `nest_`

我正在使用带有公式界面的 tidyverse 函数的逃生舱口版本,当“-”与 nest_ 相关时,我遇到了一些问题。

虽然这个块有效:

select_(mtcars, ~ -cyl)

类似的东西不适用于 nest_

nest_(mtcars, ~ -cyl)

Error in x[[i]] <- value : invalid subscript type 'language'

有没有办法让它在不写入所有剩余列的情况下工作?

在你给出的例子中,你真的不需要标准评估(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]>