0
以下代码编译并正确执行,但每次运行它时,我的R会话完成后都会收到致命错误。我正在运行R版本3.3.2和Rtools 3.3。从Rcpp函数接收结果后会话崩溃
有什么我错过了吗?我如何追踪造成坠机的原因?
#include<Rcpp.h>
using namespace Rcpp;
NumericMatrix dupCheckRcpp(NumericMatrix x) {
int nrow, ncol;
int i, j, k, m, n;
bool flag;
NumericMatrix dupMat(300,ncol);
n = 0;
nrow = 0; ncol = 0;
nrow = x.nrow();
ncol = x.ncol();
for (i = 0; i < nrow - 1 ; ++i) {
for (j = i + 1; j < nrow; ++j) {
flag = TRUE;
for (k = 0; k < ncol; ++k) {
if (x(i,k) != x(j,k)) {
flag = FALSE;
break;
}
}
if (flag == TRUE) {
for (m = 0; m < ncol; ++m) {
dupMat(n,m) = x(i,m);
}
n = n + 1;
}
}
}
return dupMat;
}
很好的答案。它工作完美。 –
未显示代码的目标是检查向量是否在1000 x 245矩阵内复制。这段代码将整个矩阵分解为只有重复的行(〜100-200)以加速检查。 R dupated()函数是将矩阵仅切成复制品的简单方法,但它是超低速。我怀疑可能有内置的C++函数可以更快地使用矢量来完成这个功能,但是我需要一些快速而肮脏的东西,以便我可以立即执行,因此我使用了强力循环。 再次感谢。 –
@SeanS,我可以建议获取rowID,创建一个只包含重复行的矩阵,然后返回列表? – coatless