在R中,rpois
可以傳遞描述多個泊松分佈的lambda的向量,例如,將lambda的向量傳遞給Rcpp的rpois
rpois(5, (1:5)*1000)
# [1] 1043 1974 3002 3930 4992
以上,對輸出矢量的每個元素是從不同的泊松分佈繪製,爲1000,2000,3000,分別4000和5000,裝置。
如果我有一個arma::mat
(使用它們,因爲在其他地方我使用的立方體)包含泊松分佈的lambda表達式,什麼是這些(一次一行)傳遞給rpois
內RCPP的最佳方式?
這裏的玩具爲例,從隨後的錯誤信息的摘錄:
library(inline)
library(RcppArmadillo)
code <- "
using namespace Rcpp;
using namespace arma;
arma_rng::set_seed(42); // Dirk's seed of choice
mat lam = randu(5, 5); // ignore the fact these are all 0-1
mat out(5, 5);
for (int i = 0; i < 5; i++) {
out.row(i) = rpois(5, lam.row(i));
}
return(wrap(out));
"
f <- cxxfunction(body=code, plugin="RcppArmadillo")
# cannot convert 'arma::subview_row<double>' to 'double' for argument '2'
# to 'Rcpp::NumericVector Rcpp::rpois(int, double)'
我必須承認,我喜歡的類型轉換的理解C++是相當差。是我試圖做的可能(我的猜測是不可能的,因爲它似乎rpois
期待雙倍),還是我需要遍歷矩陣的每個單元格,每次產生一個單一的偏差?
一個非常有用的答案,謝謝。還有一個關於搜索在線'Rcpp'手冊的好消息。我現在已經實現了你的建議方法,它工作得很好:)。 – jbaums