首页 > 解决方案 > 嵌套的 For 循环函数目标未完成

问题描述

我有一个关于嵌套循环的问题。我需要为每个样本做第 1 行 - 第 2 行、第 1 行 - 第 3 行等。然后循环到第 2 行 - 第 3 行等,没有重复(第 4 行 - 第 4 行)或组合重复(第 4 行 - 第 3 行)。接下来,我需要将所有输出放入 excel 文档中。

目前使用下面的代码,我只能实现第 1 行 - 行(n)的循环。

set.seed(1) 
df <- matrix(sample.int(10, size = 10*5, replace = TRUE), nrow = 10, ncol = 4)
print(df)
df <- as.data.frame(df)  # tabulate as dataframe 
my_list <- list()

for(i in 1:nrow(df)){
  for( j in 1:nrow(df)){
    if (i != j) {
      if(i < j){ 
      my_list[[i]] <- df[i,] - df[j,]
      }
    }
  }
}
df1 <- rbindlist(my_list, fill=TRUE)

我假设有:

if (i != j) {
      if(i < j){ 

就足够了,但它没有给我我想要的东西。

请帮忙!

标签: rloopsfor-loopnested-loops

解决方案


您可以使用combn来获取所有可能的组合并减去它们。

do.call(rbind, combn(seq(nrow(df)), 2, function(x) {
  df[x[1], ] - df[x[2], ]
}, simplify = FALSE)) -> result

write.csv(result, 'result.csv', row.names = FALSE)

推荐阅读