Порядок выполнения вложенных функций в трубе dplyr

Когда я использую вложенную функцию в шаге конвейера, порядок выполнения кажется не интуитивным.

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(.))}

Другие вопросы по тегам