我很好奇为什么下面的代码无法运行。我认为点.
是一个临时所有者,并将mtcats
传递到该位置。
table(mtcars$cyl)
mtcars %>% table(.$cyl)
%>%
管道将左侧的对象作为第一个参数粘贴到右边的功能。因此,您基本上执行:
table(mtcars, mtcars$cyl)
#> Error in table(mtcars, mtcars$cyl): all arguments must have the same length
作为agr0naut91的注释,可以使用大括号将其固定:
library(magrittr)
mtcars %>% {table(.$cyl)}
#>
#> 4 6 8
#> 11 7 14
这在您希望通过管道传递给非管道的函数时都有效友好,通常意味着它没有data.frame
参数作为第一个论点。使用dplyr::count()
,您可以获得与base::table()
相当的输出,无需使用大括号。
library(dplyr, warn.conflicts = FALSE)
mtcars %>% count(cyl)
#> # A tibble: 3 x 2
#> cyl n
#> <dbl> <int>
#> 1 4 11
#> 2 6 7
#> 3 8 14