14

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

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

谁能解释为什么第三行中的嵌套函数没有产生正确的结果?

4

1 回答 1

16

这是因为.总是作为第一个参数传递给以下函数。因此,在您第二次尝试 时colSums,您假设您将is.na(.)作为第一个参数传递给colSums,但实际上您将它作为第二个参数传递,即na.rm参数。所以你的代码实际上看起来像df %>% colSums(x = ., na.rm = is.na(.)). 您可以通过在函数周围使用来防止将.其作为第一个参数传递{}df %>% {colSums(is.na(.))}

于 2016-01-15T19:38:05.200 回答