这与Looping over a Date or POSIXct object results in a numeric iterator有关
> dates <- as.Date(c("2013-01-01", "2013-01-02"))
> class(dates)
[1] "Date"
> for(d in dates) print(class(d))
[1] "numeric"
[1] "numeric"
我有两个问题:Date
向量被强制转换为 numeric
因为 Date
对象不是严格的向量”。那么如何确定Date
应该被强制到 numeric
? 最佳答案
这里有两个问题。一是输入是否被强制来自 Date
至 numeric
.另一个是输出是否被强制为 numeric
.
输入
For 循环强制 Date
输入到 numeric
,因为正如@DWin 和@JoshuaUlrich 指出的那样,for
循环取vectors
, 和 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
或 sapply
.如果您有非 Date
对象,并希望返回 Date
对象,您可以使用 for
循环或 lapply
.如果您有 Date
对象并希望返回 Date
对象,使用 lapply
.学习更多资源
如果你想更深入地研究向量,你可以从 John Cook's notes 开始, 继续 R Inferno ,然后继续 SDA .
关于r - 如何在不强制转换为数字的情况下迭代日期列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14527564/