Rcpp:将SEXP转换为浮点/双精度 SEXP callFunction1(列出网络、列出单词、函数testWordContinuity){ SEXP res=测试字连续性(网络,字); 返回res; } 对于(int i=0;i

Rcpp:将SEXP转换为浮点/双精度 SEXP callFunction1(列出网络、列出单词、函数testWordContinuity){ SEXP res=测试字连续性(网络,字); 返回res; } 对于(int i=0;i,r,floating-point,type-conversion,double,rcpp,R,Floating Point,Type Conversion,Double,Rcpp,我相信您应该使用REAL宏,该宏返回指向双精度数组开头的指针。请参见示例。作为扩展-我知道有两种方法可以实现这一点: 请记住,R中的标量实际上始终是长度为1的向量。因此,将RSEXP对象转换为RCPPNumericVector,并使用索引(方括号)表示法引用第一个元素: double callFunction1(列出网络、列出单词、函数testWordContinuity){ SEXP res=测试字连续性(网络,字); 数字向量dblVec(res) 返回dblVec[0]; } 使用REA

我相信您应该使用
REAL
宏,该宏返回指向
双精度
数组开头的指针。请参见示例。

作为扩展-我知道有两种方法可以实现这一点:

  • 请记住,R中的标量实际上始终是长度为1的向量。因此,将R
    SEXP
    对象转换为RCPP
    NumericVector
    ,并使用索引(方括号)表示法引用第一个元素:
  • double callFunction1(列出网络、列出单词、函数testWordContinuity){
    SEXP res=测试字连续性(网络,字);
    数字向量dblVec(res)
    返回dblVec[0];
    }
    
  • 使用
    REAL
    宏并取消引用指针(指向第一个元素)。与方法1(未测试)相比,这可能是一个微观优化,但瓶颈几乎肯定是
    testWordContinuity
    R函数。在
    C库中也有一个
    asReal
    函数,但是由于
    头文件中包含了
    REAL
    宏,因此添加
    似乎增加了不必要的复杂性
  • double callFunction1(列出网络、列出单词、函数testWordContinuity){
    SEXP res=测试字连续性(网络,字);
    返回*REAL(res);
    }
    
    欢迎来到StackOverflow!您的问题中有很多冗长的话,但没有,因此我们只能回答很少的问题。请编辑以提供触发错误的最小但完整的内容。您是否尝试过
    作为
    操作员?@DirkEddelbuettel撰写了一篇文章,对这类问题进行了深入的研究。它可以e found.Psst@JosephWood Dirk写了许多精彩的Rcpp文章;然而,我写了一篇:)@coatless,我觉得自己像个白痴。那是非常粗心和无意的。我每天都在Rcpp Galary上,发现那篇文章很快,复制了链接,甚至懒得看作者。我很抱歉。我非常尊重你,经常宣传你的工作和网站。as运营商就是这么做的。我以前试过,但显然语法不正确。非常感谢。Rcpp世界中不需要
    cppFunction(“double plusTwo(double x){return x+2.0;}”)
    。如果您想要一个向量而不是(C/C++)标量,则Rcpp::NumericVector的情况同上。
    SEXP callFunction1(List network, List words, Function testWordContinuity){
      SEXP res = testWordContinuity(network, words);
      return res;
    }
    
    for(int i=0; i<(n_epochs); i++){
      NumericVector outputMatchTracker = history["output.match.tracker"];
      outputMatchTracker[i] = callFunction1(network, words, testWordContinuity);
    }
    
    // [[Rcpp::export]]
    SEXP callFunction(Function func){
      SEXP res = func();
      return(res);
    }
    
    // [[Rcpp::export]]
    NumericVector func1(Function func){
      for(int i=0; i<10; i++){
        NumericVector vect(10);
        vect[i] = callFunction(func);
      }
      return(vect);
    }