为什么我不能在调用 R 的 split 函数时使用显式形式而不是 magrittr 管道?

Why can't I use the explicit form instead of a magrittr pipe in a call to R's split function?

library(magrittr)

mtcars %>% split(.$cyl)

split(mtcars, .$cyl)

我很困惑为什么第二行有效,但第三行无效。

我正在阅读 http://r4ds.had.co.nz/,其中指出

(http://r4ds.had.co.nz/transform.html#combining-multiple-operations-with-the-pipe)

这表明第二行和第三行应该相同,但第三行给出了错误

Error in split.default(x = seq_len(nrow(x)), f = f, drop = drop, ...) : object '.' not found

我从 http://r4ds.had.co.nz/iteration.html#shortcuts 得到了第二行,但我不记得这段代码中对圆点的解释。作者写道:

Here I’ve used . as a pronoun: it refers to the current list element (in the same way that i referred to the current index in the for loop).

但我不明白在这种情况下列表元素 "current" 是什么意思。

为什么第三行报错而第二行不报错?

点对R没有特殊意义。解释点的是%>%

函数调用通常的表达形式是运行这个:

"%>%"(mtcars, split(.$cyl))

%>% 用于处理其参数的规则在其帮助文件中定义:

help("%>%", "magrittr")