在dplyr管道中执行嵌套函数的顺序

时间:2016-01-15 19:33:41

标签: r dplyr magrittr

当我在管道步骤中使用嵌套函数时,执行顺序似乎不直观。

df <- data.frame(a = c(1,NA,2), b = c(NA, NA, 1))
df %>% is.na %>% colSums # Produce correct count of missing values
df %>% colSums(is.na(.)) # Produce NA

任何人都可以解释为什么第三行中的嵌套函数不会产生正确的结果吗?

1 个答案:

答案 0 :(得分:15)

这是因为.总是作为第一个参数传递给以下函数。因此,在您colSums的第二次尝试中,您认为自己已将is.na(.)作为第一个参数传递给colSums,但您实际上将其作为第二个传递给了na.rm,这是df %>% colSums(x = ., na.rm = is.na(.))参数。那么你的代码实际上是什么样的.。您可以通过在函数周围使用{}来阻止df %>% {colSums(is.na(.))}作为第一个参数传递。 class MyData{ public : int x,y,z; }; Q_DECLARE_METATYPE(MyData)