管道后跟 .$var 到函数中,为什么这不起作用?

pipe followed by .$var into function, why doesnt this work?

有人能告诉我为什么示例 1 不起作用而示例 2 有效吗? (我将数据集通过管道传输到 mean 函数中,但只需要一个变量, 但是如果我先进行选择然后通过管道传输结果就没有问题)

iris %>% mean(.$Sepal.Length)

NA
Warning message:
In mean.default(., .$Sepal.Length) :
argument is not numeric or logical: returning NA

iris %>% .$Sepal.Length %>% mean()

 5.843333

如果您取消管道化您的代码

iris %>% mean(.$Sepal.Length)

变成

mean(iris, iris$Sepal.Length)

本质上,您正在尝试将 mean 应用于 data.frame,但没有方法可以做到这一点。

的非管道等效项
iris %>% .$Sepal.Length %>% mean()

mean(iris$Sepal.Length)

还有 一种用于数值向量的 mean 方法。

请记住,在管道中,管道左侧的整个对象都传递给右侧的第一个参数(除非用 arg = . 表示)。尝试仅传递对象的一部分往往效果不佳。