不能在r中使用带magrittr的占位符

问题描述 投票:0回答:1

我很好奇为什么下面的代码无法运行。我认为点.是一个临时所有者,并将mtcats传递到该位置。

table(mtcars$cyl)

mtcars %>% table(.$cyl)

r dplyr placeholder
1个回答
0
投票

%>%管道将左侧的对象作为第一个参数粘贴到右边的功能。因此,您基本上执行:

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
© www.soinside.com 2019 - 2024. All rights reserved.