【问题标题】:Trouble with sapplysapply 有问题
【发布时间】:2013-03-14 18:23:31
【问题描述】:

这是可复制的示例(至少在我的计算机上)

a <- as.Date(as.Date("2012-10-01"):as.Date("2013-03-25"))
myFun <- function (x) {
    return(sqrt(abs(as.numeric(x-as.Date("2013-01-01")))))
}

for (i in 1:length(a)) { print(myFun(a[i])) } 工作正常,但

sapply(a,myFun) 失败并显示错误消息

"Error in `-.Date`(x, as.Date("2013-01-01")) : 
Can only subtract from Date objects"

欢迎所有想法!

干杯

【问题讨论】:

  • 你有没有加载zoo 包?
  • @GSee 它对我来说很好用(即使加载了动物园)。你能加你的sessionInfo吗?
  • @agstudy 它适用于我加载了zoo。查看我的答案并在detach(package:zoo)之后尝试。
  • 我确实加载了 zoo 包。
  • @Chapo 和packageVersion("zoo")?我的是1.7.7。不管以下对你有用吗?

标签: r datetime zoo sapply


【解决方案1】:

在我加载 zoo 包之前,它对我不起作用。在此之前,这是因为日期和数字之间的强制问题,并且没有提供origin。如果你尝试detach(package:zoo) 并运行:

 a <- as.Date("2012-10-01"):as.Date("2013-10-01")

myFun <- function (x) {
    return(sqrt(abs( x - as.numeric( as.Date( "2013-01-01" ) ) ) ) )
}
sapply(a,myFun)

我在加载包zoo 时得到了同样的结果。原因是(在我的 R 会话中)没有运行 zoo,第一个命令导致:

 as.Date(as.Date("2012-10-01"):as.Date("2013-03-25"))

结果:

Error in as.Date.numeric(as.Date("2012-10-01"):as.Date("2013-03-25")) : 
  'origin' must be supplied

【讨论】:

  • 感谢您的回答。它确实有效,但我不确定为什么...... zoo 或 base 包应该能够处理从日期差异到数字 no 的转换?
  • @Chapo 没有 zoo 加载第一行返回一个自纪元开始以来整数天数的向量。然后在函数中,我们使用默认原点将您要减去的日期也转换为整数。这有意义吗?
  • 这确实有道理,但我试图用日期而不是整数表示来做所有事情。事实上,基本包不处理日期的直接基本操作,因此我的错误。谢谢你的回答。
猜你喜欢
  • 2021-11-17
  • 1970-01-01
  • 1970-01-01
  • 2021-01-29
  • 1970-01-01
  • 2021-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多