我正在使用基本的 R 来进行组合。
例如,假设我有一个 2 行 5 列的矩阵:
我正在使用下面的代码来生成从5列中选3列的组合:
这将导出我所需的内容:
问题出现在我使用矩阵中的大数据时,例如当我有一个包含15000行和17列的矩阵,并且我需要从这17列中获取10个集合的组合时。在这个例子中,导出需要很长时间。
对于这个组合的例子,是否有比基本的R更快更有效的方法(也许是一些软件包或代码,或者使用并行CPU)?
我正在使用Windows 7 64位,FX 8320,16GB RAM。
例如,假设我有一个 2 行 5 列的矩阵:
z<-matrix(c(1, 2, 1, 3, 2, 2, 1, 3, 2, 1),nrow=2,ncol=5,byrow = TRUE)
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 1 3 2
[2,] 2 1 3 2 1
我正在使用下面的代码来生成从5列中选3列的组合:
l<- apply(X = combn(seq_len(ncol(z)), 3),MAR = 2,FUN = function(jj) {apply(z[, jj], 1, paste, collapse="") })
这将导出我所需的内容:
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] "121" "123" "122" "113" "112" "132" "213" "212" "232" "132"
[2,] "213" "212" "211" "232" "231" "221" "132" "131" "121" "321"
问题出现在我使用矩阵中的大数据时,例如当我有一个包含15000行和17列的矩阵,并且我需要从这17列中获取10个集合的组合时。在这个例子中,导出需要很长时间。
对于这个组合的例子,是否有比基本的R更快更有效的方法(也许是一些软件包或代码,或者使用并行CPU)?
我正在使用Windows 7 64位,FX 8320,16GB RAM。
apply(z,1,function(x) combn(x,3,FUN=paste,collapse=""))
将会产生t(l)
。 - nicolaRcpp
。 :) 如果你还没有尝试过,那可能是一个不错的选择去探索。 - Alex A.paste
函数会减慢代码的速度。将数据保留在矩阵形式中可以使代码运行更加高效。 - inscaven