gpt4 book ai didi

rcpp - 为 Rcpp 函数中的参数设置默认值 `NULL`

转载 作者:行者123 更新时间:2023-12-04 02:36:13 29 4
gpt4 key购买 nike

我想将参数的默认值设置为 NULLRcpp如果参数不是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);
}

但是,我无法编译此函数并收到错误消息

error: no member named 'nrow' in 'Rcpp::Nullable<Rcpp::DataFrame_Impl<PreserveStorage> >'

这告诉我没有 nrowNullable DataFrame 定义.有没有其他方法可以实现默认 NULL DataFrame 中参数的值(即 Rcpp )这样我就可以计算 DataFrame 的其他属性(编号或行、列等)当它不是NULL .

如有任何帮助,我们将不胜感激!

谢谢!

SN248

最佳答案

你们很亲密。你错过了一个实例化: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]))
*/

为此我得到了预期的结果:

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>

关于rcpp - 为 Rcpp 函数中的参数设置默认值 `NULL`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61701367/

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