Trong vòng R, rpois
có thể được truyền một vectơ lambdas mô tả nhiều bản phân phối Poisson, ví dụ:Truyền một vectơ lambdas tới Rcpp's rpois
rpois(5, (1:5)*1000)
# [1] 1043 1974 3002 3930 4992
Ở trên, mỗi phần tử của vector đầu ra được rút ra từ một phân phối Poisson khác nhau, với phương tiện 1000, 2000, 3000, 4000 và 5000, tương ứng.
Nếu tôi có một arma::mat
(sử dụng những thứ này vì ở nơi khác tôi đang sử dụng hình khối) có chứa lambdas phân phối Poisson, cách tốt nhất để vượt qua (một hàng tại một thời điểm) là rpois
trong Rcpp là gì?
Dưới đây là một ví dụ đồ chơi, và một đoạn trích từ thông báo lỗi tiếp theo:
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)'
Tôi phải thừa nhận sự hiểu biết của tôi về loại chuyển đổi trong C++ là khá nghèo. Là những gì tôi đang cố gắng để làm có thể (tôi đoán là không, vì có vẻ như rpois
đang mong đợi một đôi), hoặc tôi cần phải lặp qua mỗi tế bào của ma trận, tạo ra một deviate duy nhất mỗi lần?
Câu trả lời rất hữu ích, cảm ơn bạn. Và một mẹo tuyệt vời để tìm kiếm hướng dẫn trực tuyến 'Rcpp'. Tôi đã thực hiện phương pháp được đề xuất của bạn ngay bây giờ và nó hoạt động tốt :). – jbaums