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

Posted

技术标签:

【中文标题】dplyr 管道中嵌套函数的执行顺序【英文标题】:Order of execution of nested functions in dplyr pipe 【发布时间】:2016-04-21 11:38:12 【问题描述】:

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

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】:

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

【讨论】:

以上是关于dplyr 管道中嵌套函数的执行顺序的主要内容,如果未能解决你的问题,请参考以下文章

js执行顺序/Promise优雅解决回调函数嵌套

如何在一个循环执行ajax方法里面嵌套的ajax方法

在嵌套函数中修改变量顺序

函数的嵌套与global和nonlacal

python基础之名称空间和作用域函数嵌套

函数的名称空间,函数的嵌套(global, nonlocal),函数名的运用