2017-05-24 7 views
0

私はtidyverse関数のエスケープハッチバージョンを数式インタフェースで使用していますが、 ' - 'にnest_が含まれている場合、いくつか問題があります。`nest_`を使用した数式での変数の引用

このチャンクは動作しますが:同様の

select_(mtcars, ~ -cyl) 

何かがxのnest_

nest_(mtcars, ~ -cyl) 

エラー[[I]] <のために動作しません - 値:無効な下付きタイプ「言語'

動作させる方法はありますか?残りの列をすべて書き込むのはどうですか?

+0

あなたが引用符で囲まれていない変数名を使用している場合は、最初の場所でSEのバージョンを使用する理由はありません; '〜'を省略してください。さらに、tidyverseは、[rlang](https://github.com/tidyverse/rlang/)ベースのSEシステムに切り替える途中にあります。このシステムでは、mtcars%>%nest( - !!文字列 'mtcars%>%nest( - !! rlang :: sym( 'cyl'))'を使って、 – alistaire

+0

@alistaire私はこれを広いプロジェクトに使用していますが、対話セッションでは使用していません。この場合、私が理解している限り、SEを使う方が良いはずです。私が間違っている? – amarchin

+0

Shinyサイトのユーザーがグループ化変数を選択できるように、コードの作成時に制御しない入力がある場合は、SEが必要です。それでも、それを必要とする機能だけが通常SEに変更されます。変数が固定されていれば、意味はありません。 – alistaire

答えて

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]> 
関連する問題