Применение функции is.na () в векторе с функцией pipe - PullRequest
1 голос
/ 07 февраля 2020

Я экспериментировал с функцией pipe из dplyr и выполнял код, приведенный ниже, но безуспешно -

library(dplyr)
12 %>% ifelse(is.na(.), FALSE, TRUE)
### Error in ifelse(., is.na(.), FALSE, TRUE) : unused argument (TRUE)

Любой указатель, почему я получаю эту ошибку? Какой правильный подход, если я хочу использовать pipe?

Ответы [ 4 ]

2 голосов
/ 07 февраля 2020

Мы можем использовать is.na непосредственно в конвейере, а не вкладывать его:

12 %>% is.na %>% ifelse(FALSE, TRUE)

или

12 %>% is.na %>% `!`

или

library(magrittr)
12 %>% is.na %>% not

или

12 %>% (is.na %>% Negate)
2 голосов
/ 07 февраля 2020

Другим вариантом является дальнейшее удаление функций.

12 %>% is.na %>% ifelse(FALSE, TRUE)
# TRUE
0 голосов
/ 07 февраля 2020
library(dplyr)
12 %>% ifelse(is.na(.), FALSE)
#FALSE

это работает для меня

0 голосов
/ 07 февраля 2020

Существует несколько возможностей:

Использование скобок : Как указывалось @tmfmnk, для получения такого поведения в pipe:

 library(dplyr)
 vec <- c(12,13, NA)
 vec %>% {ifelse(is.na(.), FALSE,TRUE)}
 # TRUE  TRUE FALSE
следует использовать {}

Unnesting : В качестве альтернативы, как указывал @Ands, можно отсоединить функции:

12 %>% is.na %>% ifelse(FALSE, TRUE)
...