5
我正在寫一些代碼在RcppEigen,我在documentation過這個不祥的警告是:可以修改RcppEigen中的映射矩陣嗎?
一絕,當然要小心,不要修改C++代碼將R對象的內容。推薦的做法是始終將映射對象聲明爲const。
這涉及「映射」矩陣,即特徵中與相應的R對象使用相同存儲器的矩陣。
這個警告是關於良好的函數式編程實踐,還是有其他的事情,如果我使用映射對象做就地修改會出錯?
這是一個簡化版本我在做什麼在RCPP:
#include <RcppEigen.h>
// [[Rcpp::depends(RcppEigen)]]
// [[Rcpp::export]]
void modify(Eigen::Map<Eigen::MatrixXd> X) {
X(0,0) = 0;
return;
}
哪個做這樣的事情在R:
X <- matrix(1:4, 2) + 0
X
# [,1] [,2]
# [1,] 1 3
# [2,] 2 4
modify(X)
X
# [,1] [,2]
# [1,] 0 3
# [2,] 2 4
對於特定的問題,我通過修改我的矩陣,我得到了5倍的速度提升,所以我爲在可讀性和可維護性方面的小犧牲做好了準備。據我所知,它可以按照預期工作,但我擔心在未來某個時候我會引入某種微妙的錯誤。
這是如此之快,如此不會讓我接受另外10回答分鐘。謝謝! – pete
幸運的時機。我只是坐下來寫一些其他Rcpp相關的代碼,刷新,看到你的問題,並試圖有幫助;-) –