Я не знаю, если это будет точно ответить на ваш вопрос, но я был в состоянии использовать функцию discard
путем изменения код немного. Вот что я сделал:
date1 <- readr::parse_date(c("2017-01-30", "2017-02-03", " "))
date2 <- readr::parse_date(c("2016-01-30", "", "2016-02-03"))
df <- tibble(date1, date2)
df
# A tibble: 3 x 2
date1 date2
<date> <date>
1 2017-01-30 2016-01-30
2 2017-02-03 NA
3 NA 2016-02-03
С keep
и discard
и работы с векторами, похоже, данные должны быть переданы им определенным образом, поэтому я думаю, что функция map
работает лучше при поставке discard
с данные так, как им нравится.
map_df(df, discard, is.na)
# A tibble: 2 x 2
date1 date2
<dttm> <dttm>
1 2017-01-30 2016-01-30
2 2017-02-03 2016-02-03
Это также работает, если вы хотите использовать strptime
, а также:
date1 <- strptime(c("2017-01-30", "2017-02-03", ""), "%Y-%m-%d")
date2 <- strptime(c("2016-01-30", "", "2016-02-03"), "%Y-%m-%d")
df <- data.frame(date1, date2)
df
date1 date2
1 2017-01-30 2016-01-30
2 2017-02-03 <NA>
3 <NA> 2016-02-03
map_df(df, discard, is.na)
# A tibble: 2 x 2
date1 date2
<dttm> <dttm>
1 2017-01-30 2016-01-30
2 2017-02-03 2016-02-03
Вы не можете создать Тиббл с POSIXlt
класса, хотя, и если вы заметили, после запуска map_df
функции в объекты даты и времени преобразуются в POSIXct.
Надеюсь, кто-то еще с более глубоким purrr
Знание может ответить на конкретный вопрос об ошибке - я думал, что вам может понадобиться некоторое обходное решение, тем не менее.
Я думаю, что функция 'discard' не нравится класс POSIXlt, но я не уверен. Он работает, если вы преобразуете x в символ. – ira