有没有一种方法可以加快combn命令的使用,以从矢量中获取2个元素的所有唯一组合?

通常可以这样设置:

# Get latest version of data.table
library(devtools)
install_github("Rdatatable/data.table",  build_vignettes = FALSE)
library(data.table)

# Toy data
d <- data.table(id=as.character(paste0("A", 10001:15000)))

# Transform data
system.time({
d.1 <- as.data.table(t(combn(d$id, 2)))
})


但是,combn比使用data.table计算所有可能的组合要慢10倍(23秒比我的计算机上的3秒)。

system.time({
d.2 <- d[, list(neighbor=d$id[-which(d$id==id)]), by=c("id")]
})


在处理非常大的向量时,我正在寻找一种仅通过计算唯一组合(例如combn)但以data.table的速度(参见第二个代码段)来节省内存的方法。

感谢您的帮助。

最佳答案

您可以使用combnPrim中的gRbase

source("http://bioconductor.org/biocLite.R")
biocLite("gRbase") # will install dependent packages automatically.
system.time({
 d.1 <- as.data.table(t(combn(d$id, 2)))
 })
#   user  system elapsed
# 27.322   0.585  27.674

system.time({
d.2 <- as.data.table(t(combnPrim(d$id,2)))
 })
#   user  system elapsed
#  2.317   0.110   2.425

identical(d.1[order(V1, V2),], d.2[order(V1,V2),])
#[1] TRUE

关于r - 更快的combn版本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26828301/

10-13 22:16