4

我正在尝试使用 mapply 将月份添加到我的数据框的 a 和 b 列中的当前日期。以下是创建示例数据框的代码:

library(lubridate)
a <- as.Date(c("2012-01-11","2012-06-30","2012-04-18"))
b <- as.Date(c("2013-04-21","2012-03-22","2012-05-01"))
df <- data.frame(a,b)

我可以使用mapply("+",df, c(30,30))将 30 天添加到两列日期。但是,当我尝试使用该命令时,mapply("%m+%",df, months(1:2))我收到错误消息:

.setupMethodsTables 中的错误(fdef,initialize = TRUE):类“derivedDefaultMethod”的这个对象没有名称“组”的槽

是否可以将 mapply 与 %m+% 运算符一起使用?

4

1 回答 1

1

在我 S4 无知的眼中,这似乎是 lubridate 包和 %m+%方法构建方式的问题。

源码

看来未导出的功能.quick_month_add会做你想做的事

 mapply(lubridate:::.quick_month_add,df,months(1:2), SIMPLIFY = FALSE)
$a
[1] "2012-01-11" "2012-06-30" "2012-04-18"

$b
[1] "2013-04-21" "2012-03-22" "2012-05-01"

请注意,SIMPLIFY必须设置为,FALSE否则您将获得数字矩阵,因为在简化为矩阵时会剥离 Date 类。

或者,Map(lubridate:::.quick_month_add,df,months(1:2))

于 2013-02-11T22:37:25.530 回答