我正在使用R
,尝试在此文件上运行sourceCpp
:
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace arma;
using namespace Rcpp;
// [[Rcpp::export]]
vec dnormLog(vec x, vec means, vec sds) {
int n = x.size();
vec res(n);
for(int i = 0; i < n; i++) {
res[i] = log(dnorm(x[i], means[i], sds[i]));
}
return res;
}
请参考这个答案,了解我从哪里得到这个函数。以下是报错信息:
no matching function for call to 'dnorm4'
正是我希望通过使用循环来避免的确切错误,因为引用的答案提到dnorm
只对其第一个参数向量化。我担心答案很明显,但我已经尝试在dnorm
之前添加R::
,尝试使用NumericVector
代替vec
,而不使用log()
。但都没有成功。然而,在dnorm
之前添加R::
确实会产生另一个错误:too few arguments to function call, expected 4, have 3; did you mean '::dnorm4'?
如果只是将上面的dnorm
替换为R::dnorm4
,并不能解决问题。
using namespace [...]
引起的问题比解决的问题要多得多。 - nrusselllog = TRUE
,但我应该传递TRUE
。我现在记得在文档中看到传递命名参数所涉及的复杂性。感谢您提供非常有用的答案。 - Jason