R 为什么mapply不返回日期对象?

R 为什么mapply不返回日期对象?,r,R,我有一个函数,它接受一个日期对象并返回一个。但是,当我使用mappy函数将函数应用于data.frame列时,我遇到了问题:我没有像预期的那样返回日期对象,而是返回数字。你知道我怎样才能把它们转换成日期对象吗?还有,我对这里发生的事情很感兴趣。非常感谢你的帮助 最简单的例子: #Define simple function that takes a date-object and returns a date-object add_day <- function(dat) {return(

我有一个函数,它接受一个日期对象并返回一个。但是,当我使用mappy函数将函数应用于data.frame列时,我遇到了问题:我没有像预期的那样返回日期对象,而是返回数字。你知道我怎样才能把它们转换成日期对象吗?还有,我对这里发生的事情很感兴趣。非常感谢你的帮助

最简单的例子:

#Define simple function that takes a date-object and returns a date-object
add_day <- function(dat) {return(dat + 1)}

#Set up data.frame with two date-object entries in one column
df <- data.frame(Col_A = c(as.Date("01/01/00", "%m/%d/%y"), as.Date("05/02/11", "%m/%d/%y")))
#That is the desired result: give a date-object to the function, get one back
add_day(df[1, "Col_A"]) #Returns [1] "2000-01-02"
add_day(df[2, "Col_A"]) #Returns [1] "2011-05-03"

#Why does it not work here? What do I get back?
mapply(add_day, df[, "Col_A"]) #Returns [1] 10958 15097; Why? What is that?
#定义接受日期对象并返回日期对象的简单函数
add_day您的函数返回的是“日期”,只是不是您习惯的格式。自[某个固定日期]起,日期在内部存储为天。(我记不清是哪一种,具体格式略有不同。)

如果将
mapply
包装为
as.Date
调用,您将看到预期的输出

看看这里发生了什么,请考虑<代码> MpIs<代码>在引擎盖下使用<代码> sPix< /C>。例如:

sapply(df[,1],add_day)
[1] 10958 15097
但是请记住,默认情况下,
sapply
unlist
ing结果,以方便查看。如果我们指定
simplify=FALSE

sapply(df[,1],add_day,simplify = FALSE)
[[1]]
[1] "2000-01-02"

[[2]]
[1] "2011-05-03"

因此,当R将列表强制为向量时,类信息被删除,只保留内部存储,即自[无论该特定日期是什么]起的天数。当然,
mapply
也有一个
SIMPLIFY
参数,其作用方式相同。

另一个选项类似于
sapply.preserving.attributes

sapply.preserving.attributes = function(l, ...) {
    r = sapply(l, ...)
    attributes(r) = attributes(l)
    r
}

> sapply.preserving.attributes(dates, add_day)
[1] "2000-01-02" "2011-05-03"

可以在运行mapply后使用这一行代码


df$date为什么不:添加_-day(df$Col_A)#[1]“2000-01-02”“2011-05-03”?或者我想:df$Col_A+1,但我会继续使用函数应用程序。谢谢joran,这是一个很好的解释。谢谢Owen,你的选择很好。我将在我的代码中使用你的函数。刚刚看到这个。非常好的功能!