我有redDressTweets
个status
的列表。 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转换为数字?
答案 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"
显然,这假设所有列表元素都具有相同的时区属性。