От R
, я пытаюсь запустить sourceCpp
на данный файл:Использование dnorm с RcppArmadillo
#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;
}
См this answer, чтобы увидеть, где я получил функцию от. Это бросает ошибку:
no matching function for call to 'dnorm4'
Каких точная ошибка, я надеялся предотвратить с помощью цикла, так как ссылки ответа упоминает, что dnorm
только векторная относительно первого аргумента. Я боюсь, что ответ очевиден, но я попытался добавить R::
до dnorm
, попробовал использовать NumericVector
вместо vec
, не используя log()
спереди. Не повезло. Однако, добавление R::
перед тем dnorm
действительно производит отдельную ошибку:
too few arguments to function call, expected 4, have 3; did you mean '::dnorm4'?
Который является не фиксируется путем замены dnorm
R::dnorm4
выше.
Мертвые с замечанием об пространствах имен. 'using namespace [...]' вызывает намного больше проблем, чем решает мой опыт. – nrussell
А теперь я вижу. Для проблемы с 4-м аргументом я сначала пытался передать 'log = TRUE', но я должен был бы передать TRUE. Теперь я помню, как осложнения, связанные с передачей именованных аргументов в документации. Спасибо за очень информативный ответ. – Jason