无法将 Rcpp::sugar::Plus_Vector_Primitive 转换为 Rcpp::traits::storage_type
Cannot convert Rcpp::sugar::Plus_Vector_Primitive to Rcpp::traits::storage_type
我基本上是在尝试使用 Rcpp
将一些 R
代码翻译成 cpp
。我在下面的代码中遇到以下错误:
error: cannot convert ‘Rcpp::sugar::Plus_Vector_Primitive<14, true, Rcpp::stats::D2<14, true, Rcpp::Vector<14, Rcpp::PreserveStorage> > >’ to ‘Rcpp::traits::storage_type<14>::type {aka double}’ in assignment
这是代码
#include <RcppArmadillo.h>
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export(".loop_exp")]]
void mm_mult(const arma::vec& helpa, const arma::mat& helpb, const arma::vec& helpc,
const Rcpp::NumericVector& t1, const arma::vec& t2, int J, Rcpp::NumericVector& prob)
{
int j;
for (j = 1; J <= J; j++)
{
arma::mat t = (helpb.row(j)).t() * (t2);
double tt = t[0,0];
prob[j] = (helpa[j] + dnorm(t1, tt, helpc[j])); <---- here is the error
}
return;
}
我猜这是一个类型转换错误,但基本上我找不到好的参考.. 谁能帮我解决这个问题?非常感谢!
原因是 dnorm
"syntaxic sugar" 有一个签名 NumericVector dnorm( NumericVector, double, double )
.
因为它 returns 是 NumericVector
,您必须自己将其转换为 double
值。
一种快速简便(但不是很稳健)的方法是对返回的向量进行子集化以仅获取其第一个元素。在您的示例中:
prob[j] = (helpa[j] + dnorm(t1, tt, helpc[j])[0]); // Note the "[0]"
否则,您的代码中还有其他一些潜在问题:您不应该 #include <Rcpp.h>
,因为它已经用 #include <RcppArmadillo.h>
完成了 --- 另外,您的循环结束条件,J <= J
,我觉得很可疑...
希望对您有所帮助:)
我基本上是在尝试使用 Rcpp
将一些 R
代码翻译成 cpp
。我在下面的代码中遇到以下错误:
error: cannot convert ‘Rcpp::sugar::Plus_Vector_Primitive<14, true, Rcpp::stats::D2<14, true, Rcpp::Vector<14, Rcpp::PreserveStorage> > >’ to ‘Rcpp::traits::storage_type<14>::type {aka double}’ in assignment
这是代码
#include <RcppArmadillo.h>
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export(".loop_exp")]]
void mm_mult(const arma::vec& helpa, const arma::mat& helpb, const arma::vec& helpc,
const Rcpp::NumericVector& t1, const arma::vec& t2, int J, Rcpp::NumericVector& prob)
{
int j;
for (j = 1; J <= J; j++)
{
arma::mat t = (helpb.row(j)).t() * (t2);
double tt = t[0,0];
prob[j] = (helpa[j] + dnorm(t1, tt, helpc[j])); <---- here is the error
}
return;
}
我猜这是一个类型转换错误,但基本上我找不到好的参考.. 谁能帮我解决这个问题?非常感谢!
原因是 dnorm
"syntaxic sugar" 有一个签名 NumericVector dnorm( NumericVector, double, double )
.
因为它 returns 是 NumericVector
,您必须自己将其转换为 double
值。
一种快速简便(但不是很稳健)的方法是对返回的向量进行子集化以仅获取其第一个元素。在您的示例中:
prob[j] = (helpa[j] + dnorm(t1, tt, helpc[j])[0]); // Note the "[0]"
否则,您的代码中还有其他一些潜在问题:您不应该 #include <Rcpp.h>
,因为它已经用 #include <RcppArmadillo.h>
完成了 --- 另外,您的循环结束条件,J <= J
,我觉得很可疑...
希望对您有所帮助:)