вернуть список с элементами из списка списков - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть список списков, например, приведенный ниже пример «testccffilt». Я пытаюсь вернуть список, где я выбираю имя из каждого списка и отставание. Например, для первого списка это будет:

c(‘TimeToShip’,1)

Я попробовал приведенный ниже пример, но он не дает мне того результата, который я ищу. У меня есть пример желаемого типа вывода, который я пытаюсь получить также ниже. Любые советы очень ценятся.

вход:

> 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))

testlist

$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 голосов
/ 02 ноября 2018

Вот один из вариантов использования цикла 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"]]))
...