【问题标题】:R: create a nested list from a list of vectorsR:从向量列表创建一个嵌套列表
【发布时间】:2016-07-27 10:25:23
【问题描述】:

我想创建一个包含向量列表的嵌套列表。
列表的每个向量包含 3 个元素。
这个想法是使用向量的第一个元素作为键,值将是一个列表,其中键将是向量的第二个元素,值是第三个元素。

我试过了:

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"

有什么想法吗?

【问题讨论】:

  • Python 中的嵌套列表≠字典!
  • 你是对的,我已经更正了我的文字:)

标签: r list nested


【解决方案1】:

可能不是最优雅的方式,但使用 data.table 可以解决问题:

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

【讨论】:

    猜你喜欢
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多