-1

我希望 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)
4

1 回答 1

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

于 2013-08-19T09:26:38.887 回答