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 %>% colSums(x = ., na.rm = is.na(.))
。您可以通过在函数周围使用 来防止
.
作为第一个参数传递。 df %>% colSums(is.na(.))
【讨论】:
以上是关于dplyr 管道中嵌套函数的执行顺序的主要内容,如果未能解决你的问题,请参考以下文章