gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 02:46:36 25 4
gpt4 key购买 nike

我有一个函数,它接受一个 Date 对象并返回一个。但是,当我使用 mapply 函数将该函数应用于 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?

最佳答案

您的函数正在返回“日期”,只是不是您习惯的格式。日期在内部存储为自 [某个固定日期] 以来的天数。 (我一时想不起来是哪一个,具体格式略有不同。)

如果您包装您的 mapply调用 as.Date你会看到你期望的输出。

要了解这里发生了什么,请考虑 mapply正在使用 sapply在引擎盖下。例如:

sapply(df[,1],add_day)
[1] 10958 15097

但请记住 sapply默认为 unlist为方便起见。如果我们指定 simplify = FALSE :
sapply(df[,1],add_day,simplify = FALSE)
[[1]]
[1] "2000-01-02"

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

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

关于r - 为什么 mapply 不返回日期对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7698797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com