Подтвердить что ты не робот

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

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

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

Может ли кто-нибудь объяснить, почему вложенная функция в третьей строке не приводит к правильному результату?

4b9b3361

Ответ 1

Это потому, что . всегда передается как первый аргумент следующей функции. Итак, во второй попытке colSums вы предполагаете, что вы передаете is.na(.) в качестве первого аргумента в colSums, но вы фактически передаете его как второе, что является параметром na.rm. Итак, как выглядит ваш код: df %>% colSums(x = ., na.rm = is.na(.)). Вы можете предотвратить передачу . в качестве первого параметра с помощью {} вокруг функции. df %>% {colSums(is.na(.))}