假设我有一个POSIX向量
x <- strptime(c("2017-01-30", ""), "%Y-%m-%d")
x
[1] "2017-01-30 EET" NA 我想放弃和purrr::discard的约会
> library(purrr)
> discard(x, is.na)
Error: Result 1 is not a length 1 atomic vector有人能解释一下为什么会抛出一个错误吗?
例如,For
y <- c(1, NA)它工作得很好:
> discard(y, is.na)
[1] 1发布于 2017-05-12 02:09:13
我不知道这是否能准确地回答您的问题,但是我可以通过稍微修改代码来使用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类创建tibble,如果您注意到了,在运行map_df函数之后,date-time对象将被转换为POSIXct。
希望其他具有较深purrr知识的人能够回答有关错误消息的特定问题--但是,我认为您可能需要一些解决方法。
https://stackoverflow.com/questions/41934765
复制相似问题