如何导出带有默认参数的Rcpp类方法 我有一个C++类MyCclass,它有一个方法:代码> Foo>(int x=0),它的参数为代码>代码> x>代码>默认值=0。C++类可以通过导出到R类 RCPP_MODULE(my_module) { class_< myClass >( "myClass" ) .constructor() .method( "foo", &myClass::foo ) ; }
但是在我的情况下它不起作用。我最近也有同样的问题。在查看了处理类的如何导出带有默认参数的Rcpp类方法 我有一个C++类MyCclass,它有一个方法:代码> Foo>(int x=0),它的参数为代码>代码> x>代码>默认值=0。C++类可以通过导出到R类 RCPP_MODULE(my_module) { class_< myClass >( "myClass" ) .constructor() .method( "foo", &myClass::foo ) ; },r,rcpp,R,Rcpp,但是在我的情况下它不起作用。我最近也有同样的问题。在查看了处理类的rcpp源文件之后(在我的设置中,~/R/x86\u 64-pc-linux-gnu-library/3.2/rcpp/include/rcpp/module/class.h),我认为目前不可能 我想到的最好的解决方法是在R中创建一个包装器来处理默认参数 下面是一个完整的示例,演示如何执行此操作。我定义了一个简单的函数,它接受3个参数并输出它们的和。第二个和第三个参数是可选的,默认设置为10和100 mwe.cpp 这将输出预期结
rcpp
源文件之后(在我的设置中,~/R/x86\u 64-pc-linux-gnu-library/3.2/rcpp/include/rcpp/module/class.h
),我认为目前不可能
我想到的最好的解决方法是在R中创建一个包装器来处理默认参数
下面是一个完整的示例,演示如何执行此操作。我定义了一个简单的函数,它接受3个参数并输出它们的和。第二个和第三个参数是可选的,默认设置为10
和100
mwe.cpp
这将输出预期结果:
> my_mwe$sum_them_wrapper(3, optional_arg2=500)
[1] 513
#include <Rcpp.h>
class MWE {
public:
int sum_them(int mandatory_arg,
int optional_arg1,
int optional_arg2)
{
return (mandatory_arg+optional_arg1+optional_arg2);
}
};
RCPP_MODULE(mod_mwe) {
Rcpp::class_<MWE>( "MWE" )
.constructor()
.method("sum_them", &MWE::sum_them)
;
}
require('Rcpp')
# source the C++ code
sourceCpp('mwe.cpp')
# create an instance of the class:
my_mwe = new(MWE)
# assign a wrapper with default arguments to the instance:
assign('sum_them_wrapper',
function(mandatory_arg,
optional_arg1=10,
optional_arg2=100) {
return(my_mwe$sum_them(mandatory_arg, optional_arg1, optional_arg2))
},
envir = my_mwe
)
> my_mwe$sum_them_wrapper(3, optional_arg2=500)
[1] 513