我希望df3和df4具有相同的输出,但它不是,有什么区别?
tim.seq<-seq(as.POSIXlt("2013-07-01 00:00:00",origin = "1960-01-01",tz="GMT"),
as.POSIXlt("2013-07-16 12:00:00",origin = "1960-01-01",tz="GMT"),by="12 hours")
df<-data.frame(times=factor(tim.seq))
df2<-df
df2[,"times"]<-as.POSIXlt(as.character(df2[,"times"]),origin = "1960-01-01",tz="GMT")
df3<-df
df3$times<-as.POSIXlt(as.character(df3[,"times"]),origin = "1960-01-01",tz="GMT")
for(i in df3$times) print(i)
t<-as.POSIXlt(as.character(df[,"times"],origin = "1960-01-01",tz="GMT"))
df4<-data.frame(times=t)
for(i in df4$times) print(i)
答案 0 :(得分:0)
不同之处如下:
typeof(df3$times) # type = "list"
typeof(df4$times) # type = "double"
typeof(unlist(df3$times)) # now it has the same type (double)
因为两者的类型不同,所以输出不同,因为R以不同的方式打印它们。
更有趣的是为什么会出现差异的问题。我认为(如果我错了,请纠正我)不同之处在于,在第一种情况下,它会使用列表覆盖df3$times
。在第二种情况下,您直接构造df,因此在索引后获得double
类型,在第一种情况下,在索引后获得list
。
也许其他人有更好的解释......
HTH