如果按索引或按值打印,则在for循环内打印值会产生不同的结果

时间:2016-09-07 16:19:25

标签: r

我试图理解为什么当我通过索引或直接访问列表的值时打印列表的值时会得到不同的结果:

ws <- c(as.Date('2016-01-01'))

for (w in ws) {
  print(w)  
}
# prints 16801

for (idx in 1:length(ws)) {
  print(ws[idx])
}
# prints 2016-01-01

我不确定为什么第一次,当我使用in访问该值时,我得到了错误的值。

如何打印直接通过in访问的值(不使用索引)?还有为什么会这样?

1 个答案:

答案 0 :(得分:2)

可能是因为ws实际上是一个整数;您看到的“日期”仅用于打印目的,但数据会在起点后的几天内进行跟踪。

当您创建索引变量w in ws时,R可能会将其强制为整数,因此w已丢失所有“日期”属性,而您获得的只是基础整数。

确实,在?Control我们看到seq

  

评估向量的表达式(包括列表和   表达式)或者是一个pairlist或NULL。系数值将被强制执行   到一个字符向量。

as.vector(ws)会将ws返回给它的基础整数状态。

在您的第二个示例中,ws保持不变,因此从中打印元素将继续格式化为日期。