在 Rcpp 中,如何使用声明为 Nullable 的变量?
In Rcpp, how can I use a variable declared as Nullable?
我是 Rcpp 的新手,但精通 R。我正在尝试编写一个 Rcpp 函数,其参数可以输入为 NULL
。在 Rcpp 中,我的理解是,这意味着在函数参数中将变量声明为“可空”,使用 .isNotNULL()
测试输入对象是否为 NULL,并为新变量分配原始参数的值(遵循说明描述 here).
当我尝试 运行 以下代码时,我收到一条错误消息 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
下游。我见过的所有可为空参数的示例都只在 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;
}
我是 Rcpp 的新手,但精通 R。我正在尝试编写一个 Rcpp 函数,其参数可以输入为 NULL
。在 Rcpp 中,我的理解是,这意味着在函数参数中将变量声明为“可空”,使用 .isNotNULL()
测试输入对象是否为 NULL,并为新变量分配原始参数的值(遵循说明描述 here).
当我尝试 运行 以下代码时,我收到一条错误消息 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
下游。我见过的所有可为空参数的示例都只在 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;
}