2012-12-07 77 views
2

为什么下面的代码不是打印日期而是整数?R for for循环与类型转换

> for (t in seq(as.Date('20090101','%Y%m%d'),as.Date('20090105','%Y%m%d'),1)) 
+ { 
+ print(t) 
+ } 
[1] 14245 
[1] 14246 
[1] 14247 
[1] 14248 
[1] 14249 

回答

3

正如@flodel建议,for循环保存类型,而不是类:

h <- seq(as.Date('20090101','%Y%m%d'),as.Date('20090105','%Y%m%d'),1) 
class(h) 
[1] "Date" 
> typeof(h) 
[1] "double" 

解决方法:

使用矢量化版本:

print(seq(as.Date('20090101','%Y%m%d'),as.Date('20090105','%Y%m%d'),1)) 

或循环序列索引并用[检索日期:

for (i in seq_along(h)) { 
    dt <- h[i] 
    print(dt) 
} 


[1] "2009-01-01" 
[1] "2009-01-02" 
[1] "2009-01-03" 
[1] "2009-01-04" 
[1] "2009-01-05" 
+0

有关问题的“为什么”的一部分的任何想法? – flodel

+0

诚实号可能是因为班级日期的内部表示为数字。 – agstudy

+2

找到了答案[这里](https://stat.ethz.ch/pipermail/r-help/2008-December/182520.html)。 '为'保留的类型,而不是班级。它还建议循环遍历序列中的索引作为解决方法。 – flodel