为什么在将列表转换为向量时将POSIXct转换为数字

时间:2016-11-02 11:03:30

标签: r posixct

我有redDressTweetsstatus的列表。 status是一个包含字段created的类。我正在尝试列出发布推文的时间列表。以下是我试图做的事情

times <- unlist(lapply(redDressTweets, function(tweet) {tweet$created }))

输出是数字向量:

[1] 1478044029 1477954062 1477909847 1477887746 1477832560 1477640940 1477640939
[8] 1477628031 1477540826

redDressTweets[[1]]$created的课程为"POSIXct" "POSIXt"

为什么会发生这种情况,如何阻止它将POSIXct转换为数字?

1 个答案:

答案 0 :(得分:6)

您可以更轻松地复制:

x <- list(as.POSIXct("2016-11-02"), as.POSIXct("2016-11-03"))
unlist(x)
#[1] 1478041200 1478127600

unlist组合了列表中的值。 POSIXct变量的内部表示是数值。由于属性,它们只是POSIXct变量,最重要的是class属性。列表可以包含所有类型的对象。文档说:

  

在可能的情况下,列表元素被强制转换为共同模式   不列表,结果通常最终成为一个字符向量。   矢量将被强制转换为最高类型的组件   层次结构NULL&lt;原始&lt;逻辑&lt;整数&lt;双&lt;复杂&lt;   字符&lt;列表&lt;表达式:pairlists被视为列表。

请注意,它表示“普通模式”,而不是普通类。由于类可以是任何东西并且可以强制执行任何类型的底层结构(例如,甚至可能无法以有意义的方式组合同一类的两个对象),unlist只是剥离所有属性(除了a list其中所有元素都是因素)。可以处理POSIXct值,例如factor值,但情况并非如此(可能会影响性能)。

你无法避免这种情况,但很容易解决:

y <- unlist(x)
attributes(y) <- attributes(x[[1]])
y
#[1] "2016-11-02 CET" "2016-11-03 CET"

显然,这假设所有列表元素都具有相同的时区属性。