2016-07-27 122 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