gpt4 book ai didi

r - 默认 NULL 参数 Rcpp

转载 作者:行者123 更新时间:2023-12-03 18:30:14 25 4
gpt4 key购买 nike

我正在尝试使用默认值 NULL 定义一个函数Rcpp 中的参数.下面是一个例子:

// [[Rcpp::export]]
int test(int a, IntegerVector kfolds = R_NilValue)
{
if (Rf_isNull(kfolds))
{
cout << "NULL" << endl;
}
else
{
cout << "NOT NULL" << endl;
}

return a;
}

但是当我运行代码时:
test(1)

我收到以下错误:

Error: not compatible with requested type



我该如何解决这个问题?

最佳答案

你很幸运。我们在 mvabund 中需要这个和 Rblpapi ,并自上(两)个 Rcpp 版本以来拥有它。

所以试试这个:

// [[Rcpp::export]]
int test(int a, Rcpp::Nullable<Rcpp::IntegerVector> kfolds = R_NilValue) {

if (kfolds.isNotNull()) {
// ... your code here but note inverted test ...

一个很好的完整示例是 here in Rblpapi .
您还可以像以前一样设置默认值(受 C++ 中所有选项的常规规则的约束,该选项右侧的所有选项也具有默认值)。

编辑:为了完整起见,这里是一个完整的例子:
#include <Rcpp.h>

// [[Rcpp::export]]
int testfun(Rcpp::Nullable<Rcpp::IntegerVector> kfolds = R_NilValue) {

if (kfolds.isNotNull()) {
Rcpp::IntegerVector x(kfolds);
Rcpp::Rcout << "Not NULL\n";
Rcpp::Rcout << x << std::endl;
} else {
Rcpp::Rcout << "Is NULL\n";
}
return(42);
}

/*** R
testfun(NULL)
testfun(c(1L, 3L, 5L))
*/

生成此输出:

R> sourceCpp("/tmp/nick.cpp")
R> testfun(NULL)
Is NULL
[1] 42

R> testfun(c(1L, 3L, 5L))
Not NULL
1 3 5
[1] 42
R>

关于r - 默认 NULL 参数 Rcpp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34205925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com