Как бы я справился с такого рода сценарием?Я надеюсь, что мне не нужно создавать сеть операторов if-else.
df = data.frame(One= c(1,2,3), Two= c(4,5,NA), Three= c(7,NA,9))
One Two Three
1 4 7
2 5 NA
3 NA 9
Затем я переставляю данные, чтобы получить все возможные варианты:
dfPermuted = df %>%
expand(One, Two, Three)
Я хочусоздать функцию, которая принимает NA (или NULL) в качестве значения по умолчанию для аргументов, но также может фильтровать данные, если передается число. Например:
filterFunction = function(data, one = NA, two = NA, three = NA){
data %>%
filter(One == one) %>%
filter(Two == two) %>%
filter(Three == three)
}
Это работает, если значения фактически передаются варгументы типа filterFunction(dfPermuted, one = 2, two = 5, three = 9)
, но для комбинации, где все значения равны NA, filterFunction(dfPermuted)
возвращает фрейм данных без результата.
Я сделал снимок:
filterFunctionFailure = function(data, one = NA, two = NA, three = NA) {
data %>%
filter(ifelse(is.na(one), is.na(One), One == one)) %>%
...
}
И этоне работал.