gpt4 book ai didi

r - 在Rcpp中用省略号传递许多参数(...)

转载 作者:行者123 更新时间:2023-12-04 09:33:29 25 4
gpt4 key购买 nike

我正在尝试使用...在rcpp函数中传递参数,但是它不起作用。如何正确做到这一点?

NumericVector function(SEXP xR, ...){
NumericVector x(xR);
int lenx = x.size();
NumericVector ret(lenx);
for(int i=0; i < lenx; i++){
if(x[i]<0){
ret[i] = 0;
}else if(x[i]>1){
ret[i] = 1;
}else{
ret[i] = anotherfunction(x[i], ...);
}
}
return ret;
}

在当前版本中,我收到此错误: expected primary-expression before '...' token

最佳答案

Rcpp11具有DotsNamedDots类的可变数量参数的概念。您将执行以下操作:

#include <Rcpp11>

List force_dots( const Dots& dots ){
List out(n) ;
for( int i=0; i<n; i++){
out[i] = Rcpp_eval( dots.promise(i), dots.environment(i)) ;
}
return out ;
}

// [[export]]
List dots_example(NumericVector x, Dots dots){
int n = dots.size() ;
List args = force_dots(dots) ;
return args ;
}

/*** R
dots_example(1:10, "e" )
# [[1]]
# [1] "e"
*/

在此文件上使用 attributes::sourceCpp时,您会得到带有省略号的R函数:
> dots_example
function(x, ...){
res <- .Call( "sourceCpp_dots_example" , x, environment())
res
}

这仅部分回答了这个问题,即如何将R中可变数量的参数传递给C++。

调用 do.call函数时,您还需要与R的 another_function类似的东西。现在,您必须手动进行操作,直到我们找到实现有用的 do_call的方法为止

关于r - 在Rcpp中用省略号传递许多参数(...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24590946/

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