R中两个大向量之间的最快距离计算

R中两个大向量之间的最快距离计算,r,matrix,distance,R,Matrix,Distance,我希望以R中最快的方式计算一个向量中的每个元素与另一个向量中的每个元素之间的距离。一个小例子是: distf<-function(a,b) abs(a-b) x<-c(1,2,3) y<-c(1,1,1) result<-outer(x,y, distf) distf这是一个Rcpp版本,它返回一个1和0的整数矩阵,具体取决于每一对范围的比较是否正确。您是否需要所有4500万(给定或获取)对距离,或者您需要基于这些距离进行其他计算吗?我需要确定其中哪些距离小于预先指定的

我希望以R中最快的方式计算一个向量中的每个元素与另一个向量中的每个元素之间的距离。一个小例子是:

distf<-function(a,b) abs(a-b)
x<-c(1,2,3)
y<-c(1,1,1)
result<-outer(x,y, distf)

distf这是一个
Rcpp
版本,它返回一个1和0的整数矩阵,具体取决于每一对范围的比较是否正确。您是否需要所有4500万(给定或获取)对距离,或者您需要基于这些距离进行其他计算吗?我需要确定其中哪些距离小于预先指定的数字/卡尺,将小于特定距离的部分替换为1,其余部分替换为0。我将需要所有的距离,因为我希望研究不同的卡钳最终。我在optmatch软件包中尝试了一个名为caliper的函数,该函数直接执行此过程,但它无法处理如此大的计算量。这些信息可能在您的问题中。好的,编辑,谢谢。这看起来很好,但我以前从未使用过Rcpp,因此我正在阅读如何在OS X上使用Rcpp。非常感谢;我将尝试这个解决方案。我终于想出了如何运行这段代码。它真的很快,在我的系统上花了大约38秒;这绝对有助于我的处境。谢谢
#include <Rcpp.h>

using namespace Rcpp;

// [[Rcpp::export]]
NumericMatrix fast_cal(NumericVector x, NumericVector y, double threshold) {
  const long nr=x.length();
  const long nc=y.length();
  NumericMatrix output(nr, nc);
  for (long i=0; i<nr; i++) {
    for (long j=0; j<nc; j++) {
      output(i, j) = (fabs(x(i) - y(j)) <= threshold) ? 1 : 0;
    }
  }
  return output;
}
library("Rcpp")
sourceCpp("fast_cal.cpp")
x <- rnorm(30000)
y <- rnorm(30000)
out <- fast_cal(x, y, 0.5)