我想在C++代码中使用R函数rmultinom,并与Rcpp一起使用。但我遇到了一个关于参数不足的错误 - 我不熟悉这些参数应该是什么,因为它们与在R中使用的函数参数不对应。我还没有使用"::Rf_foo"语法从Rcpp代码访问R函数的成功经验。
下面是我的简化代码版本(是的,我正在编写Gibbs采样器)。
我是一个新手,所以我意识到这些代码很可能是新手和低效的。我乐于听取关于如何改进我的c++代码的建议,但我的优先事项是了解rmultinom业务。谢谢!
顺便说一句,我很抱歉与this thread相似,但:
1.答案不适用于我的目的 2.差异足以证明需要提出不同的问题(你认为呢?) 3.该问题已经发布并回答了一年。
下面是我的简化代码版本(是的,我正在编写Gibbs采样器)。
#include <Rcpp.h>
using namespace Rcpp;
// C++ implementation of the R which() function.
int whichC(NumericVector x, double val) {
int ind = -1;
int n = x.size();
for (int i = 0; i < n; ++i) {
if (x[i] == val) {
if (ind == -1) {
ind = i;
} else {
throw std::invalid_argument( "value appears multiple times." );
}
} // end if
} // end for
if (ind != -1) {
return ind;
} else {
throw std::invalid_argument( "value doesn't appear here!" );
return -1;
}
}
// [[Rcpp::export]]
int multSample(double p1, double p2, double p3) {
NumericVector params(3);
params(0) = p1;
params(1) = p2;
params(2) = p3;
// HERE'S THE PROBLEM.
RObject sampled = rmultinom(1, 1, params);
int out = whichC(as<NumericVector>(sampled), 1);
return out;
}
我是一个新手,所以我意识到这些代码很可能是新手和低效的。我乐于听取关于如何改进我的c++代码的建议,但我的优先事项是了解rmultinom业务。谢谢!
顺便说一句,我很抱歉与this thread相似,但:
1.答案不适用于我的目的 2.差异足以证明需要提出不同的问题(你认为呢?) 3.该问题已经发布并回答了一年。