为Rcpp函数中的参数设置“NULL”默认值

为Rcpp函数中的参数设置“NULL”默认值,rcpp,Rcpp,我想在Rcpp函数中将参数的默认值设置为NULL,如果参数不是NULL,则根据参数进行一些计算。这种代码的一个例子是 #include <Rcpp.h> using namespace Rcpp; // [[Rcpp::export]] int test_null(Nullable<DataFrame> p1 = R_NilValue){ if(p1.isNull()){ NumericMatrix T(2,2); Rcout << T

我想在
Rcpp
函数中将参数的默认值设置为
NULL
,如果参数不是
NULL
,则根据参数进行一些计算。这种代码的一个例子是

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
int test_null(Nullable<DataFrame> p1 = R_NilValue){

  if(p1.isNull()){
    NumericMatrix T(2,2);
    Rcout << T << std::endl;
  }
    else{
    NumericMatrix T(p1.nrow());
    Rcout << T << std::endl;
  }
  return (42);
}
#包括
使用名称空间Rcpp;
//[[Rcpp::导出]]
int test_null(可为null的p1=R_null值){
if(p1.isNull()){
数值矩阵T(2,2);

Rcout您非常接近。您错过了一个实例化:a
Nullable
与它的模板类型还不相同--我们需要先创建一个对象

下面是您的代码,其中包含更正的空格;-)和缺少的行,以及对每种情况的测试调用:

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
int test_null(Nullable<DataFrame> p1 = R_NilValue){

  if (p1.isNull()) {
    NumericMatrix T(2,2);
    Rcout << T << std::endl;
  } else {
    DataFrame S(p1);
    NumericMatrix T(S.nrow());
    Rcout << T << std::endl;
  }
  return (42);
}

/*** R
test_null(NULL)
test_null(data.frame(a=1:3, b=letters[1:3]))
*/

非常感谢@Dirk!是的,我不知道实例化部分,在之前对类似问题的回答中也找不到它。只是为了添加-让您的视频继续播放,我们喜欢它们!这样的代码很棘手。要记录的内容太多了:-/。我记得我们在so I(字面意思)中使用了它看了一个例子。我检查了一下:Rcpp图库中没有任何内容。[但我们几乎肯定在单元测试中会这样做。总是检查这些!]你想回答你的问题(以及几乎完整的答案)吗并在Rcpp图库中适当地提交一些降价?非常感谢视频上的大拇指!感谢单元测试指针。我很想为这个问题提交Rcpp图库!太好了!如果您需要帮助,请告诉我。安装程序比较旧,并且使用了Jekyll。您可以提交一个.Rmd文件,或者,如果您愿意的话呃,一个嵌入了降价的.cpp。很乐意帮忙,也许可以在那里或通过电子邮件戳我一下。请用真名发布(就像你在CRAN软件包中做的一样,我仍然对它印象深刻)。
R> Rcpp::sourceCpp("~/git/stackoverflow/61701367/answer.cpp")

R> test_null(NULL)
0.00000 0.00000
0.00000 0.00000

[1] 42

R> test_null(data.frame(a=1:3, b=letters[1:3]))
0.00000 0.00000 0.00000
0.00000 0.00000 0.00000
0.00000 0.00000 0.00000

[1] 42
R>