相关疑难解决方法(0)

更快的组合版本

有没有办法加快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)))
})
Run Code Online (Sandbox Code Playgroud)

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

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

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

我感谢任何帮助.

combinations r combn data.table

12
推荐指数
5
解决办法
2555
查看次数

R - 如何从距离矩阵中获取匹配元素的行和列下标

我有一个整数向量vec1,我正在使用dist函数生成一个远程矩阵。我想获取距离矩阵中某个值的元素的坐标(行和列)。本质上,我想获得相距 d 距离的一对元素。例如:

vec1 <- c(2,3,6,12,17)
distMatrix <- dist(vec1)

#   1  2  3  4
#2  1         
#3  4  3      
#4 10  9  6   
#5 15 14 11  5
Run Code Online (Sandbox Code Playgroud)

说,我对向量中相距 5 个单位的一对元素感兴趣。我想得到坐标 1 是行和坐标 2 是距离矩阵的列。在这个玩具示例中,我希望

coord1  
# [1] 5
coord2
# [1] 4
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种有效的方法来获取这些值而不涉及将dist对象转换为矩阵或遍历矩阵?

r distance matrix euclidean-distance

6
推荐指数
1
解决办法
3895
查看次数

快速获取所有矩阵列元素对的产品

假设我有一个数字matrix:

set.seed(1)
mat <- matrix(rnorm(1000), ncol = 100)
Run Code Online (Sandbox Code Playgroud)

我想生成所有向量,这些向量是所有唯一向量对的元素乘积的结果mat.

我们如何改进以下代码:

all.pairs <- t(combn(1:ncol(mat), 2))

res <-
  do.call(cbind,
          lapply(1:nrow(all.pairs),
                 function(p) mat[, all.pairs[p, 1]] * mat[, all.pairs[p, 2]]))
Run Code Online (Sandbox Code Playgroud)

product r matrix

4
推荐指数
1
解决办法
492
查看次数