有人可以解释为什么table()
在dplyr-magrittr管道操作链中不起作用?这是一个简单的代表:
tibble(
type = c("Fast", "Slow", "Fast", "Fast", "Slow"),
colour = c("Blue", "Blue", "Red", "Red", "Red")
) %>% table(.$type, .$colour)
sort.list(y)出错:'x'必须是'sort.list'的原子 你有没有在名单上打电话给'排序'?
但这当然有效:
df <- tibble(
type = c("Fast", "Slow", "Fast", "Fast", "Slow"),
colour = c("Blue", "Blue", "Red", "Red", "Red")
)
table(df$type, df$colour)
Blue Red
Fast 1 2
Slow 1 1
答案 0 :(得分:10)
由于你自己没有.
,因此仍然将tibble作为第一个参数传递,所以它更像是
... %>% table(., .$type, .$colour)
正式的magrittr解决方法是使用花括号
... %>% {table(.$type, .$colour)}
答案 1 :(得分:3)
%>%
中的dplyr
运算符实际上是从magrittr
导入的。使用magrittr
,我们还可以使用%$%
运算符,该运算符公开先前表达式中的名称:
library(tidyverse)
library(magrittr)
tibble(
type = c("Fast", "Slow", "Fast", "Fast", "Slow"),
colour = c("Blue", "Blue", "Red", "Red", "Red")
) %$% table(type, colour)
输出:
colour
type Blue Red
Fast 1 2
Slow 1 1
答案 2 :(得分:1)
我已经习惯像这样使用with(table(...))
:
tibble(type = c("Fast", "Slow", "Fast", "Fast", "Slow"),
colour = c("Blue", "Blue", "Red", "Red", "Red")) %>%
with(table(type, colour))
类似于我们可能将%>%
读为“然后”的方式,我将其读为“然后使用该数据创建此表”。