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

Mar*_*aub 1 r magrittr

library(magrittr)

mtcars %>% split(.$cyl)

split(mtcars, .$cyl)
Run Code Online (Sandbox Code Playgroud)

我很困惑为什么第二行有效,但第三行没有.

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

在此输入图像描述 (http://r4ds.had.co.nz/transform.html#combining-multiple-operations-with-the-pipe)

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

split.default中的错误(x = seq_len(nrow(x)),f = f,drop = drop,...):object'.' 未找到

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

我在这里用过.作为代词:它引用当前列表元素(与我在for循环中引用当前索引的方式相同).

但我不明白列表元素在这种情况下是"当前"意味着什么.

当第二行没有时,为什么第三行会出错?

G. *_*eck 6

Dot对R没有特殊意义.它%>%解释了点.

以通常的函数调用形式表示它正在运行:

"%>%"(mtcars, split(.$cyl))
Run Code Online (Sandbox Code Playgroud)

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

help("%>%", "magrittr")
Run Code Online (Sandbox Code Playgroud)