这里有两个问题。一个是输入是否被强制从Date
to numeric
。另一个是输出是否被强制转换为numeric
.
输入
For 循环强制Date
输入到numeric
,因为正如@DWin 和@JoshuaUlrich 指出的那样,for
循环 takevectors
和Date
s 在技术上不是向量。
> for(d in dates) print(class(d))
[1] "numeric"
[1] "numeric"
另一方面,lapply
它的简化子代sapply
没有这样的限制。
> sapply( dates, function(day) class(day) )
[1] "Date" "Date"
输出
然而!上面的输出class()
是一个字符。如果您尝试实际返回日期对象,sapply
则不是您想要的。
lapply
不会强制转换为向量,但sapply
会:
> lapply( dates, identity )
[[1]]
[1] "2013-01-01"
[[2]]
[1] "2013-01-02"
> sapply( dates, identity )
[1] 15706 15707
这是因为sapply
的简化函数将输出强制转换为向量。
概括
所以:如果你有一个Date
对象并且想要返回一个非Date
对象,你可以使用lapply
or sapply
。如果您有一个非Date
对象,并且想要返回一个Date
对象,则可以使用for
循环或lapply
. 如果您有一个Date
对象并想要返回一个Date
对象,请使用lapply
.
更多学习资源
如果您想更深入地研究向量,您可以从John Cook 的笔记开始,继续阅读 R Inferno,然后继续阅读 SDA。