Rarmadillo中的合并功能

yli*_*gle 5 r rcpp

如何x使用Rarmadillo 实现一个简单的合并功能来合并两个矩阵,每个矩阵具有两个列,并具有一个公共列?换句话说,我想要一个函数my_merge_cpp(mat1, mat2),该函数将使用以下R代码给出相同的结果:

mat1 = as.matrix(data.frame(x=1:5, y1=2:6)) ## an example
mat2 = as.matrix(data.frame(x=3:7, y2=3:7)) ## an example
as.matrix(merge(mat1, mat2, all=FALSE))
Run Code Online (Sandbox Code Playgroud)

Dir*_*tel 5

我会用data.table。尝试使用更大的数据时,看到您用自家的Rcpp或RcppArmadillo解决方案击败了它,我会感到非常惊讶。

library(data.table)
mat1 <- data.table(x=1:5, y1=2:6)  ## an example
mat2 <- data.table(x=3:7, y2=3:7)  ## an example
mat1[mat2, on="x", nomatch=NULL]
Run Code Online (Sandbox Code Playgroud) 演示版
R> library(data.table)
R> mat1 <- data.table(x=1:5, y1=2:6)  ## an example
R> mat2 <- data.table(x=3:7, y2=3:7)  ## an example
R> mat1[mat2, on="x", nomatch=NULL]
   x y1 y2
1: 3  4  3
2: 4  5  4
3: 5  6  5
R> 
Run Code Online (Sandbox Code Playgroud)

  • 您可能需要查看方法的一些方面。首先,RcppArmadillo仅用于_numerical matrices_,因此您坚持使用data.frames可能会导致多余的副本。其次,RcppArmadillo用于线性代数。合并数据是不同的。 (2认同)