我希望共享一个R函数,以查找单个向量的元素之间所有可能的唯一无向组合:

combi <- function(vec1)
{
  si <- length(vec1)
  first <- rep(vec1, (si-1):0)
  secR <- rev(vec1)
  second <- secR[sequence(1:(si-1))]
  second <- rev(second)
  combi <- matrix(cbind(first, second), ncol = 2)
  return(combi)
}

并问是否有更简单的方法来做到这一点? (我需要结果在2列矩阵中)。

最佳答案

好吧,有一个内置的combn函数:

t(combn(vec1,2))

不过,您的外观看起来更快,可能是因为combn试图解决一个更一般的问题(??):
> library(rbenchmark)
> v <- 1:20
> benchmark(combi(v),t(combn(v,2)))
            test replications elapsed relative user.self sys.self
1       combi(v)          100   0.005      1.0     0.004    0.000
2 t(combn(v, 2))          100   0.044      8.8     0.040    0.004

关于r - R中的简单组合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8051278/

10-13 04:23