2016-07-27 120 views
1

我想用矢量列表創建一個嵌套列表。
列表的每個向量都包含3個元素。
這個想法是使用矢量的第一個元素作爲鍵,值將是一個列表,該鍵將是矢量的第二個元素,值是第三個元素。

我想:R:從矢量列表創建一個嵌套列表

input <- list() 
input[[1]] <- c("V3", "c100", "s10") 
input[[2]] <- c("V3", "c100", "s25") 
input[[3]] <- c("V3", "c90", "s10") 
input[[4]] <- c("V3", "c90", "s25") 
input[[5]] <- c("V2V3", "c100", "s10") 
input[[6]] <- c("V2V3", "c100", "s25") 
input[[7]] <- c("V2V3", "c90", "s10") 
input[[8]] <- c("V2V3", "c90", "s25") 

lapply(input, function(x){ 
    list(x[1] <- list(x[2] <- x[3])) 
}) 

我得到:

[[1]] 
[[1]][[1]] 
[[1]][[1]][[1]] 
[1] "s10" 



[[2]] 
[[2]][[1]] 
[[2]][[1]][[1]] 
[1] "s25" 
... 

,但我想是這樣的:

$V3 
$V3$c100 
$V3$c100[[1]] 
[1] "s10" 

$V3$c100[[2]] 
[1] "s25" 


$V3 
$V3$c90 
$V3$c90[[1]] 
[1] "s10" 

$V3$c90[[2]] 
[1] "s25" 


$V2V3 
$V2V3$c100 
$V2V3$c100[[1]] 
[1] "s10" 

$V2V3$c100[[2]] 
[1] "s25" 


$V2V3 
$V2V3$c90 
$V2V3$c90[[1]] 
[1] "s10" 

$V2V3$c90[[2]] 
[1] "s25" 

任何想法?

+0

嵌套列表≠詞典! –

+0

你是對的,我糾正了我的文字:) – Mesmer

回答

1

也許不是最優雅的方式,但使用data.table的伎倆:在Python

require(data.table) 

dt = data.table(x = sapply(input, '[', 1), 
       y = sapply(input, '[', 2), 
       z = sapply(input, '[', 3)) 

dt2 = dt[, { 
    l1 = list() 
    l1[[x]][[y]] = as.list(z) 
    list(l1) 
}, by = list(x, y)] 

dt3 = dt2[, list({ 
    l2 = list() 
    l2[[x]] = unlist(V1, recursive = FALSE) 
    l2 
}), by = x] 

out = dt3[['V1']] 
names(out) = dt3[['x']] 

out 
+0

謝謝,它的工作:) – Mesmer