Rcpp、赋值错误、SEXPREC*的含义

Rcpp, Value Assignment Error, Meaning of SEXPREC*

我在Rcpp中写了如下代码

//#include <Rcpp.h>
#include <RcppArmadilloExtensions/sample.h>
#include <random>
#include <iostream>
using namespace Rcpp;


// [[Rcpp::export]]

arma::vec SimulBetaBin(int K, arma::vec N){
  
  arma::vec D;

  
  Environment pkg = Environment::namespace_env("extraDistr");
  Function f = pkg["rbbinom"];

  for(int i=0; i<K; ++i){
    D[i] = f(1, N[i],  1,  1);
  }
  
  
  return  D;
}


此函数的目的是模拟 Beta 二项分布。 但是,当我在 R 中编译代码时,出现以下错误

error: cannot convert 'SEXP' {aka 'SEXPREC*'} to 'double' in assignment
     D[i] = f( N[i],  1,  1);
                           ^

我试图理解 SEXPREC* 是什么,但我变得更加困惑

What R users think of as variables or objects are symbols which are bound to a value. The value can be thought of as either a SEXP (a pointer), or the structure it points to, a SEXPREC,这是什么意思??

因为我想我必须先理解这一点才能解决错误。

万一

你从调用 Rcpp::Function() object 得到了 SEXP,所以你需要转换它。下面是函数的修改版本(也将 headers 简化为您实际使用和需要的版本),这个版本是为我编译的。

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

// [[Rcpp::export]]
arma::vec SimulBetaBin(int K, arma::vec N) {
  arma::vec D;
  Rcpp::Environment pkg = Rcpp::Environment::namespace_env("extraDistr");
  Rcpp::Function f = pkg["rbbinom"];

  for (int i=0; i<K; ++i) {
    SEXP val = f(1, N[i],  1,  1);
    D[i] = Rcpp::as<double>(val);
  }

  return  D;
}

编辑: 删除了另一个未使用的 header。