dplyr について 2 つの質問があります。私の場合は、解決しようとしている問題に関連しています。
data_frame
一連の操作の結果を に渡そうとするときに、パイプを使用してをクロス分類するにはどうすればよいxtabs
ですか?- 通常、パイプの引数は & で示され
.
ますdplyr
が、これは式インターフェイスの他のすべてmagrittr
を示すために使用されるトークンでもあります。私はどこかに未解決の問題があることを知っています (今は見つけられません) での置き換えについて話しています。dplyr
.
_
次に例を示します。
wakefield::r_data_frame(
n = 100,
cat1 = r_sample_factor(x = LETTERS[1:3]),
cat2 = r_sample_factor(x = LETTERS[1:3]),
cat3 = r_sample_factor(x = LETTERS[1:3]),
bin1 = r_sample_logical()
) %>%
dplyr::filter(bin1) %>%
xtabs(. ~ cat1 + cat2 + cat3, data = .)
出力で失敗します:
Error in model.frame.default(formula = . ~ cat1 + cat2 + cat3, data = .) :
invalid type (list) for variable '.'
なぜなら、最初のものを前の計算の結果にmagrittr
置き換えているからです。1 つの方法は、次のように最初のピリオドを完全に省略することです。.
data_frame
wakefield::r_data_frame(
n = 100,
cat1 = r_sample_factor(x = LETTERS[1:3]),
cat2 = r_sample_factor(x = LETTERS[1:3]),
cat3 = r_sample_factor(x = LETTERS[1:3]),
bin1 = r_sample_logical()
) %>%
dplyr::filter(bin1) %>%
xtabs( ~ cat1 + cat2 + cat3, data = .)
.
しかし、 の反対側に移動する必要がある場合はどうすればよいformula
でしょうか?
編集:
@MrFlickで指摘されているxtabs
ように、とにかくRHSを取りません.
。.
この問題は、コードを使用して予想した RHS の競合を使用して例示することもできると思いました。
wakefield::r_data_frame(
n = 100,
cat1 = r_sample_factor(x = LETTERS[1:3]),
cat2 = r_sample_factor(x = LETTERS[1:3]),
cat3 = r_sample_factor(x = LETTERS[1:3]),
bin1 = r_sample_logical()
) %>%
dplyr::filter(bin1) %>%
dplyr::select(-bin1) %>%
xtabs( ~ ., data = .)
しかし、これは期待どおりに機能します。最初のものを にmagrittr
置き換えようとしない理由を誰かが説明できますか?.
data_frame