4

dplyr について 2 つの質問があります。私の場合は、解決しようとしている問題に関連しています。

  1. data_frame一連の操作の結果を に渡そうとするときに、パイプを使用してをクロス分類するにはどうすればよいxtabsですか?
  2. 通常、パイプの引数は & で示され.ます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

4

1 に答える 1