我犯了错误,有趣的输出,正确的代码是:
iris %>% dim(.)%>% .[1]
不正确的是:
iris %>% dim(.)[1]
给出:
[1] 5.9 5.0
iris %>% dim(.)[1]
中发生了什么?
答案 0 :(得分:3)
表达式的效果是使用从dim
返回的维度到数据帧第一列中的子集条目:
> dim(iris)
[1] 150 5
> iris[,1][c(150, 5)]
[1] 5.9 5.0
如果你遗漏了" 1"在索引中,您可以看到返回行150和5:
> iris %>% dim(.)[]
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
150 5.9 3.0 5.1 1.8 virginica
5 5.0 3.6 1.4 0.2 setosa
这种行为是因为magrittr允许使用点来检索数据集的属性,并将它们作为参数传递给被调用的函数。
在magrittr docs中:
help("%>%", magrittr)
将点用于辅助目的 通常,'rhs'中需要'lhs'的某些属性或属性 除了'lhs'本身的价值之外,还要打电话,例如的数量 行或列。使用点占位符是完全有效的 在'rhs'调用中多次,但按设计行为是 在嵌套函数调用中使用它时略有不同。在 特别是,如果占位符仅用于嵌套函数 打电话,'lhs'也将作为第一个参数!原因 对于这一点,在大多数用例中,这产生最可读性 码。例如,'iris%>%子集(1:nrow(。)%% 2 == 0)'是 相当于'iris%>%子集(。,1:nrow(。)%% 2 == 0)'但是 稍微紧凑。
所以在这种情况下,子集"功能"使用[]
的输出调用(iris %>% dim
)。