从R中的2个或多个向量创建嵌套列表?

说我有2个(或以上)的载体:从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) 

Btw。循环速度更快。我怀疑还有一些更漂亮和更有创意的方法来做这件事。

回答:

这是一个解决方案,可以将所需的组合生成到数据框中。

> 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

>

以上是 从R中的2个或多个向量创建嵌套列表? 的全部内容, 来源链接: utcz.com/qa/258129.html

回到顶部