[英]create nested list from 2 or more vectors in R?
假設我有2個(或更多)向量:
v1 <- letters[1:2]
v2 <- letters[24:26]
> v1
[1] "a" "b"
> v2
[1] "x" "y" "z"
我如何以編程方式構造一個嵌套列表,其中包含輸入向量的所有組合的列表? 編輯:我想做到這一點而沒有低效的循環結構。
> l1 <- list(list(v1[1], v2[1]), list(v1[1], v2[2]),
list(v1[1], v2[3]), list(v1[2], v2[1]),
list(v1[2], v2[2]), list(v1[2], v2[3]))
> str(l1)
List of 6
$ :List of 2
..$ : chr "a"
..$ : chr "x"
$ :List of 2
..$ : chr "a"
..$ : chr "y"
$ :List of 2
..$ : chr "a"
..$ : chr "z"
$ :List of 2
..$ : chr "b"
..$ : chr "x"
$ :List of 2
..$ : chr "b"
..$ : chr "y"
$ :List of 2
..$ : chr "b"
..$ : chr "z"
一種簡單的方法是使用循環:
l1 <- list()
list_pos <- 1L
for (i in 1:length(v1)) {
for (j in 1:length(v2)) {
l1[[list_pos]] <- list(v1[i], v2[j])
list_pos <- list_pos + 1L
}
}
編輯 :
我認為循環會得到一些不公平的代表,但是下面的一些(丑陋的)代碼避免了它們:
l2 <- apply(expand.grid(v1, v2), 1, as.list)
順便說一句。 循環更快。 我懷疑仍然有一些更漂亮,更富創意的方式來做到這一點。
這是一種將所需組合生成一個數據幀的解決方案。
> v1 <- letters[1:2]
> v2 <- letters[24:26]
>
> aResult <- expand.grid(v2,v1)
> View(aResult)
> aResult
Var1 Var2
1 x a
2 y a
3 z a
4 x b
5 y b
6 z b
>
如果必須將數據幀拆分為每個列表條目一個組合的list()
,我們可以使用split()
完成此操作。
#If the data frame must be split into a list, one entry per row
aResult$id <- as.factor(1:nrow(aResult))
theList <- split(aResult,aResult$id)
打印列表中的第一個元素,我們將看到以下內容。
> theList[[1]]
Var1 Var2 id
1 x a 1
>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.