【问题标题】:How to replace "for" loops with an efficient algorithm in R when calculating with unique pairs使用唯一对计算时如何用 R 中的有效算法替换“for”循环
【发布时间】:2024-01-20 09:39:01
【问题描述】:

我正在寻找一种有效的算法来执行以下功能:

 for(j in 1:nrow) { #begin loop over j from 1 to nrow
   xJ=vectorX1[j] #some random vector
   yJ=vectorY1[j] #some random vector

   for(ij in j:nrow) { #begin loop over ij from j to nrow
     xIJ=vectorX1[ij] #some random vector
     yIJ=vectorX1[ij] #some random vector

     if(j != ij) { #only perform on unique pairs            
        XX=myfun(xJ, yJ, xIJ, yIJ)
     }
   }
 }

我的向量很长,因为 for 循环是时间汇。任何帮助将不胜感激。

【问题讨论】:

  • 您可能会考虑使用 apply,因为它比 R 中的 for 循环要快得多。这篇文章可能会有所帮助:*.com/a/7141669/2146843

标签: r for-loop unique


【解决方案1】:

对于成对操作,您可能会发现 proxy 包中的 dist() 函数很有用。您可以提供自己的函数来替换通常的距离函数。使用下面的简单示例,使用nrow = 1000dist() 方法花费的时间不到for() 循环方法的一半。

nrow <- 1000
vectorX1 <- 1:nrow
vectorY1 <- nrow+(1:nrow)
m <- cbind(vectorX1, vectorY1)
myfun <- function(row1, row2) row1[1]*row1[2] + row2[1]*row2[2]

library(proxy)
dist(m, method=myfun)

【讨论】:

    最近更新 更多