返回具有列表列表中的元素的列表

时间:2018-11-02 17:39:59

标签: r list lapply

我有一个列表列表,例如“ testccffilt”下方的输入示例。我正在尝试返回一个列表,在其中我从每个列表和滞后中选择名称。例如,对于第一个列表,它将是:

c(‘TimeToShip’,1)

我尝试了下面的lapply示例,但它并没有提供我想要的输出。我在下面也提供了想要的输出类型的示例。任何提示都非常感谢。

输入:

> testccffilt

$TimeToShip
           cor lag
3284 0.9998749   1

$TimeToRelease
           cor lag
3285 0.9997293   2

尝试:

testlist<-lapply(testccffilt,function(x)list(names(x),x$lag))

测试列表

$TimeToShip
$TimeToShip[[1]]
[1] "cor" "lag"

$TimeToShip[[2]]
[1] 1


$TimeToRelease
$TimeToRelease[[1]]
[1] "cor" "lag"

$TimeToRelease[[2]]
[1] 2

所需的输出:

[[1]]
[1] "TimeToShip" "1"         

[[2]]
[1] "TimeToRelease" "2"     

数据:

dput(testccffilt)
structure(list(TimeToShip = structure(list(cor = 0.999874880882358, 
    lag = 1), .Names = c("cor", "lag"), row.names = 3284L, class = "data.frame"), 
    TimeToRelease = structure(list(cor = 0.999729343078789, lag = 2), .Names = c("cor", 
    "lag"), row.names = 3285L, class = "data.frame")), .Names = c("TimeToShip", 
"TimeToRelease"))

1 个答案:

答案 0 :(得分:1)

这是使用for循环的一种选择

out <- vector(mode = "list", length(testccffilt))
for (i in 1:length(testccffilt)) {
  out[[i]] <- c(names(testccffilt)[[i]], testccffilt[[i]][["lag"]])
}
out
#[[1]]
#[1] "TimeToShip" "1"         

#[[2]]
#[1] "TimeToRelease" "2" 

另一个选择是lapply,可能会更快。

lapply(1:length(testccffilt), function(x)
  c(names(testccffilt)[[x]], testccffilt[[x]][["lag"]]))