有没有一种方法可以加快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的速度(参见第二个代码段)来节省内存的方法。感谢您的帮助。
最佳答案
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/