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