R &引用;内部“产品”;未在此范围中声明

R &引用;内部“产品”;未在此范围中声明,r,rcpp,rcpparmadillo,R,Rcpp,Rcpparmadillo,您好,我对rcpp和计算两个变量的内积不太熟悉,但对于以下代码,出现了一个错误“未在此范围内声明内积”: #include <math.h> #include <RcppCommon.h> #include <RcppArmadillo.h> // [[Rcpp::depends(RcppArmadillo)]] using namespace Rcpp; // [[Rcpp::export]] NumericVector polynomial_kernel

您好,我对rcpp和计算两个变量的内积不太熟悉,但对于以下代码,出现了一个错误“未在此范围内声明内积”:

#include <math.h>
#include <RcppCommon.h>
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]

using namespace Rcpp;
// [[Rcpp::export]]
NumericVector polynomial_kernel(NumericVector x, NumericMatrix Y, double scale = 1, double offset = 
1, int d=1){

  int n = Y.nrow();
  NumericVector kernel(n);

  for (int j = 0; j < n; j++){
    NumericVector v = Y( j,_ );
    double crossProd =innerProduct(x,v);
    kernel[j]= pow((scale*crossProd+offset),2); 
  }
  return kernel;
}
#包括
#包括
#包括
//[[Rcpp::depends(RcppArmadillo)]]
使用名称空间Rcpp;
//[[Rcpp::导出]]
NumericVector多项式\核(NumericVector x,NumericMatrix Y,双刻度=1,双偏移=
1,int d=1){
int n=Y.nrow();
数值向量核(n);
对于(int j=0;j

请帮助我解决此问题。

下面是实际编译的代码的更简单、修复版本。它使用犰狳类型来实现一致性,并通过标准方式通过乘法计算两个向量的内积,而不是调用不存在的“内积”

#include <RcppArmadillo.h>      // also pulls in Rcpp.h amd cmath

// [[Rcpp::depends(RcppArmadillo)]]

// [[Rcpp::export]]
arma::vec polynomial_kernel(arma::vec x, arma::mat Y,
                            double scale = 1, double offset = 1, int d=1) {

  int n = Y.n_rows;
  arma::vec kernel(n);

  for (int j = 0; j < n; j++){
    arma::rowvec v = Y.row(j);
    double crossProd = arma::as_scalar(v * x);
    kernel[j] = std::pow((scale*crossProd+offset),2);
  }
  return kernel;
}

您希望函数
内积(Rcpp::NumericVector,Rcpp::NumericVector)
从何而来?有不同的签名。顺便问一下,是
内部产品
(代码)还是
内部产品
(错误消息)?您是否考虑过实际使用犰狳?更正:这是一个Rcpp函数innerProduct()。我也在代码中进行了更正。但是,我收到了相同的错误消息。错误消息仍然与您的代码不匹配。请发布实际代码和实际错误消息。实际错误为“innerProduct”,未在此范围内声明。上面的代码就是我试图运行的代码。请告诉我在编写代码时是否有错误。您希望函数
innerProduct(Rcpp::NumericVector,Rcpp::NumericVector)
来自哪里?AFAIK无论是Rcpp还是RcppArmadillo都没有提供。请回答您的问题,提供实际的错误信息。
R> set.seed(123)
R> polynomial_kernel(runif(4), matrix(rnorm(16),4))
         [,1]
[1,] 3.317483
[2,] 3.055690
[3,] 1.208345
[4,] 0.301834
R>