关于dplyr有两个问题,在我的案例中,这个问题与我试图解决的问题有关:
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
正在用先前计算的结果.
替换第一个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
吗?