Есть ли способ ускорить команду 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
в 10 раз медленнее (23 секунды против 3 секунд на моем компьютере), чем вычисление всех возможных комбинаций с использованием data.table.
system.time({
d.2 <- d[, list(neighbor=d$id[-which(d$id==id)]), by=c("id")]
})
Работа с очень большими векторами, я ищу способ сохранить память, только вычисляя уникальные комбинации (например, combn
), но со скоростью data.table(см. второй фрагмент кода).
Я ценю любую помощь.