如何从大量数据集中找到所有比较

时间:2019-06-25 22:51:35

标签: r loops

我从一个实验中获得了大量数据。数据集中大约有25000个光谱。我想看看所有频谱中是否有任何共同的特征。有一个内置函数可用于比较两个特定光谱之间的光谱。但是我想开发一个循环,让我从所有可能的比较中得到结果。最后,要创建一个data.frame或列表以及所比较频谱编号的标识。

我编写了一个简单的循环,可以比较光谱1和2、2和3、3和4以及4和5。

for (i in 1:4){
   comparison <- compareSpectra(raw_25kda[[i]], raw_25kda[[i+1]], fun = "common")
   print(as.list(comparison))
}

从循环中,我分别得到4个2、5、6、2的列表,分别用于1和2、2和3、3和4以及4和5的四个比较。

第一个比较是介于1和2之间,并且有2个共同特征。我有什么办法可以明确地打印出比较1和2以及它们之间有2个共同的特征?

我还希望比较1和3、1和4、2和4、3和4。

当我稍后在不同的R块中调用比较时,该比较只给我一个值,例如最后一个值2。如何将列表保存在循环中以供将来分析?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我没有您正在使用的数据或软件包,因此可能有一些问题,但希望可以指出正确的方向。

以下是5个数据集的所有组合:

my_data_sets <- 1:5
combos <- combn(my_data_sets, m = 2, simplify = T)
combos
#     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#[1,]    1    1    1    1    2    2    2    3    3     4
#[2,]    2    3    4    5    3    4    5    4    5     5

有10个。现在我们可以初始化一个包含10个元素的列表,以将结果存储在其中。

combo_len = dim(combos)[2]
output <- vector("list", combo_len)
for (i in combo_len) {
  set1 = combos[1, i]
  set2 = combos[2, i]
  output[[i]] <- compareSpectra(raw_25kda[[set1]], raw_25kda[[set2]], fun = "common")
}

output对象现在应具有十个元素,每个元素代表各自的组合。