R`dplyr`代码:`iris%>%dim(。)[1]`是什么意思?

时间:2016-07-10 11:05:24

标签: r dplyr pipeline

我犯了错误,有趣的输出,正确的代码是:

iris %>% dim(.)%>% .[1]

不正确的是:

iris %>% dim(.)[1]

给出:

[1] 5.9 5.0

iris %>% dim(.)[1]中发生了什么?

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)。