RCPP犰狳:在函数中打印整数值

RCPP犰狳:在函数中打印整数值,r,rcpp,rcpparmadillo,R,Rcpp,Rcpparmadillo,CPP和RCPP的新功能 我正在与RCPP一起制作一个R包 以下是我的步骤: 使用包传输到目录 运行compileAttributes(pkgdir=“.”,verbose=TRUE) 然后从devtools运行build和install 我希望我的一个CPP函数在调用消息时打印消息。 所以我补充说: Rcpp::Rcout << "Hello World!" << std::endl; Rcpp::Rcout在我的系统(Ubuntu 20.04,R

CPP和RCPP的新功能

我正在与RCPP一起制作一个R包

以下是我的步骤:

  • 使用包传输到目录
  • 运行compileAttributes(pkgdir=“.”,verbose=TRUE)
  • 然后从devtools运行build和install
  • 我希望我的一个CPP函数在调用消息时打印消息。 所以我补充说:

    Rcpp::Rcout << "Hello World!" << std::endl;
    
    Rcpp::Rcout在我的系统(Ubuntu 20.04,R4.0.0)上,这就像预期的那样工作(在添加
    /[[Rcpp::export]]
    属性以确保该函数可以从R调用后):

    sillyme(诊断(2))
    #你好,世界!
    # 2
    #      [,1] [,2]
    # [1,]    1    0
    # [2,]    0    1
    
    在我的系统(Ubuntu20.04,R4.0.0)上,这就像预期的那样工作(在添加
    /[[Rcpp::export]]
    属性以确保该函数可以从R调用后):

    sillyme(诊断(2))
    #你好,世界!
    # 2
    #      [,1] [,2]
    # [1,]    1    0
    # [2,]    0    1
    
    帮助我们帮助您:提供帮助。我将从一个独立的C++文件导出函数,使用<代码> /[[RCPP::Ext] ] /Cuth>属性,并以这种方式再现不想要的行为,然后您有一个简单的可重复的代码进入您的问题,让我们能够看到问题所在。我不想发布完整的项目框架等。也许你应该,或者至少你应该更仔细地看看框架生成了什么:在一个包中,你不需要
    Rcpp::depends()
    Rcpp::plugins()
    ,因为这是在
    描述
    文件级别处理的(可能是
    src/Makevars
    ,但现在C++11已经是默认版本了)。所有这些都是无害的,但细节很重要。这里有一个示例,但不可复制;我在“答案”中演示当你在自己的机器上尝试这个精确的代码时,这个代码是否工作了?它是否编译得很好?如果是这样的话,当你从R?好点调用它的时候,它是如何表现的?让我尝试一下我的情况。帮助我们帮助你:提供一个。我将从一个独立的C++文件导出带有“COD”的函数。e> //[[Rcpp::导出]]
    属性并以这种方式复制不需要的行为,那么您就有了一个简单的最小可复制代码,我们可以看到问题所在。同意,请参阅更新。我不想发布完整的项目框架等。也许您应该,或者至少您应该更仔细地查看骨架生成的内容:In一个不需要
    Rcpp::depends()
    Rcpp::plugins()
    的包,因为这是在
    描述
    文件级别处理的(可能是
    src/Makevars
    ,但现在C++11已经是默认的了).所有这些都是无害的,但细节很重要。这里有一个例子,但不可复制;我在“答案”中演示这段代码按照您所描述的方式工作。您在自己的机器上尝试过这段代码吗?它编译得好吗?如果是的话,当您从R调用它时,它到底表现得如何?很好,让我尝试提取我的情况。是的,
    [[Rcpp::export]]
    在一个包中很重要!如果它丢失了,你会得到警告,如果你忽略了这些…那么你可能会得到令人失望的结果。是的,
    [[Rcpp::export]]]
    在一个包中很重要!如果它丢失了,你会得到警告,如果你忽略了这些…那么你可能会得到令人失望的结果。
    Rcpp::Rcout << i << std::endl;
    
        # include <RcppArmadillo.h>
        // [[Rcpp::depends(RcppArmadillo)]]
        // [[Rcpp::plugins(cpp11)]]
    
        using namespace Rcpp ;
        arma::mat sillyme (arma::mat FE) {
      
        arma::mat FEE = FE ;
        Rcpp::Rcout << "Hello World!" << std::endl;
        Rcpp::Rcout << FE.n_rows << std::endl;
    
        return(FEE) ;
        }