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