2013-03-14 260 views
0

这里是reproductible例子(至少在我的电脑上)麻烦与sapply

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" 

所有的想法,欢迎!

干杯

+0

你有'zoo'包装? – GSee 2013-03-14 18:25:15

+0

@对我来说它工作正常(即使加载了动物园)。你可以添加你的'sessionInfo'吗? – agstudy 2013-03-14 18:28:19

+1

@agstudy it * only *适用于加载'zoo'的我。看到我的回答,并在'detach(package:zoo)''后面试试。 – 2013-03-14 18:37:00

回答

0

,直到我装了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 
+0

谢谢您的回答。它确实有效,但我不确定为什么......动物园或基础软件包应该能够处理从日期差异到数字不变的转换? – Chapo 2013-03-14 18:47:09

+0

@没有'动物园'的Chap加载第一行返回自纪元开始以来整数天数的向量。然后在函数中,我们将您想要减去的日期也转换为使用默认原点的整数。那有意义吗? – 2013-03-14 18:50:33

+0

它确实有道理,但我试图用日期而不是它们的整数表示来做所有事情。事实上,基本软件包不能处理日期的直接基本操作,因此我的错误。 谢谢你的回答。 – Chapo 2013-03-14 18:54:15