带有mapply的“%m%”运算符

时间:2013-02-11 19:24:35

标签: r lubridate

我正在尝试使用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”类的此对象命名“group”

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

1 个答案:

答案 0 :(得分:1)

对于我的S4无知的眼睛,这似乎是lubridate包的问题以及%m+%方法的构建方式。

查看the source

看来未导出的函数.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))