禁用mapply自动将日期转换为数字

时间:2014-12-17 22:34:46

标签: r

当你这样做时我注意到了:

mapply(function(x) { x }, c(as.Date('2014-1-1'), as.Date('2014-2-2')))

R会自动将日期向量转换为数字向量。有没有办法禁用这种行为?

我知道你可以把结果包装成as.Date(...,origin ='1970-1-1'),但我只能想象这里必须有更好的解决方案。

1 个答案:

答案 0 :(得分:4)

这与mapply通过simplify2array简化结果的方式有关。

x <- list(as.Date('2014-1-1'), as.Date('2014-2-2'))
simplify2array(x, higher = FALSE)
# [1] 16071 16103

您可以关闭简化,然后手动缩小列表。

do.call(c, mapply(I, x, SIMPLIFY = FALSE))
# [1] "2014-01-01" "2014-02-02"

或者您可以将MapReduce(或do.call)一起使用

Reduce(c, Map(I, x))
# [1] "2014-01-01" "2014-02-02"

Map基本上是mapply(..., SIMPLIFY = FALSE),我使用I代替function(x) { x },因为它只是按原样返回其输入。