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

15

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

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个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接