r-在Rcpp中,如何使用声明为Nullable的变量



我是Rcpp的新手,但精通R。我正在尝试编写一个Rcpp函数,其参数可以输入为NULL。在Rcpp中,我的理解是,这意味着将变量声明为";可为空的";在函数自变量中,使用.isNotNULL()测试输入对象是否为NULL,并为新变量分配原始自变量的值(遵循此处描述的方向(。

当我尝试运行以下代码时,我得到一个错误,上面写着use of undeclared identifier 'x':

// [[Rcpp::export]]
NumericVector test(Nullable<NumericVector> x_) {
if (x_.isNotNull()) {
NumericVector x(x_);
}
//Other stuff happens
if (x_.isNotNull()) {
return x;
} else {
NumericVector y = NumericVector::create(3);
return y;
}
}

如果发现x_不是NULL,那么我正在编写的实际函数在循环中使用x下行。我看到的所有可为null的参数示例都只在if语句中使用新分配的变量,而不在它之外。如何在后续代码中使用x

您应该研究C++中的局部和全局变量。

这项工作:

#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
NumericVector test(Nullable<NumericVector> x_) {
NumericVector x;
if (x_.isNotNull()) {
x = x_;
}
//Other stuff happens
if (x_.isNotNull()) {
return x;
} else {
NumericVector y = NumericVector::create(3);
return y;
}
}

然而,我会重组代码,避免重复if条件:

#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
NumericVector test(Nullable<NumericVector> x_) {
NumericVector x;
if (x_.isNull()) {
x = NumericVector::create(3);
return x;
}

x = x_;
//Other stuff happens
return x;
}

相关内容

  • 没有找到相关文章