首页 > 解决方案 > 如何在R中迭代生成一定数量的向量?

问题描述

我正在分析 PCA 数据。所以我必须比较 PC1 与 PC2、PC1 与 PC3 等。我想将这些 ggplot 对象存储到一个向量中。直到这里没有问题。我创建一个向量:

Myplot <- vector('list',NumberToBeInserted)

然后我可以运行一个 for 循环或一个 lapply。但是,假设在不久的将来,我需要分析 PC2 与 PC3(直到 PC2 与 PCn)或更一般的 PCn-1 与 PCn。因此,我需要生成大量这些向量,以便将 PC 比较存储在不同的集合中。假设我知道需要 5 个与我上面提出的向量相似的向量。如何创建一个返回这些向量的函数?这个问题有意义还是手动做更好?因为我想提高我的 RI 技能,所以我很好奇

标签: rfor-loop

解决方案


我不确定这是否是您要查找的内容,但假设我有一个包含 5 个复杂对象的列表(例如,这里的它们都是简单的字符串,但是相同的方法适用于任何 R 对象,例如 ggplot ):

big_list <- list(PC1 = "Complex object1",
                 PC2 = "Complex object2",
                 PC3 = "Complex object3",
                 PC4 = "Complex object4",
                 PC5 = "Complex object5")

如果我想要一个包含此列表中元素的每个成对组合的新列表,我可以这样做:

all_combos <- apply(combn(5, 2), 2, function(i) big_list[i])
names(all_combos) <- NULL

5 个对象中有 10 种可能的成对组合,所以我将有一个长度为 10 的列表,每个列表本身都是我的复杂对象的长度为 2 的列表:

str(all_combos)
#> List of 10
#>  $ :List of 2
#>   ..$ PC1: chr "Complex object1"
#>   ..$ PC2: chr "Complex object2"
#>  $ :List of 2
#>   ..$ PC1: chr "Complex object1"
#>   ..$ PC3: chr "Complex object3"
#>  $ :List of 2
#>   ..$ PC1: chr "Complex object1"
#>   ..$ PC4: chr "Complex object4"
#>  $ :List of 2
#>   ..$ PC1: chr "Complex object1"
#>   ..$ PC5: chr "Complex object5"
#>  $ :List of 2
#>   ..$ PC2: chr "Complex object2"
#>   ..$ PC3: chr "Complex object3"
#>  $ :List of 2
#>   ..$ PC2: chr "Complex object2"
#>   ..$ PC4: chr "Complex object4"
#>  $ :List of 2
#>   ..$ PC2: chr "Complex object2"
#>   ..$ PC5: chr "Complex object5"
#>  $ :List of 2
#>   ..$ PC3: chr "Complex object3"
#>   ..$ PC4: chr "Complex object4"
#>  $ :List of 2
#>   ..$ PC3: chr "Complex object3"
#>   ..$ PC5: chr "Complex object5"
#>  $ :List of 2
#>   ..$ PC4: chr "Complex object4"
#>   ..$ PC5: chr "Complex object5"

因此,要访问第一对对象,我会这样做:

all_combos[[1]]
#> $PC1
#> [1] "Complex object1"
#> 
#> $PC2
#> [1] "Complex object2"

推荐阅读