gpt4 book ai didi

rcpp函数构造一个函数

转载 作者:行者123 更新时间:2023-12-05 05:24:22 24 4
gpt4 key购买 nike

在 R 中,存在创建另一个函数的函数的可能性,例如

create_ax2 <-  function(a) {

ax2 <- function(x) {
y <- a * x^2
return(y)
}

return(ax2)
}

结果是

> fun <- create_ax2(3)
> fun(1)
[1] 3
> fun(2)
[1] 12
> fun(2.5)
[1] 18.75

我在 R 中有一个如此复杂的创建函数,它接受几个参数,设置返回函数中使用的一些常量,进行一些中间计算等......但结果是一个太慢的函数。因此,我尝试将代码翻译成 C++,以便与 Rcpp 一起使用。但是,我想不出一种在 C++ 函数内构造函数并将其返回以在 R 中使用的方法。

这是我目前所拥有的:

Rcpp::Function createax2Rcpp(int a) {

double ax2(double x) {
return(a * pow(x, 2));
};

return (ax2);
}

这给了我错误“此处不允许定义函数”,我对如何创建函数一头雾水。

编辑:问题 RcppArmadillo pass user-defined function接近,但据我所知,它只提供了一种将 C++ 函数传递给 R 的方法。它没有提供一种在 C++ 函数传递给 R 之前初始化某些值的方法。

最佳答案

好吧,据我所知,你想要一个函数返回带有闭包的函数,也就是“在闭包中定义的函数‘记住’它被创建的环境。”

在 C++11 及更高版本中,很可能定义这样的函数,沿着这些行

std::function<double(double)> createax2Rcpp(int a) {
auto ax2 = [a](double x) { return(double(a) * pow(x, 2)); };
return ax2;
}

会发生什么,重载operator() 的匿名类和对象将被创建,它将捕获闭包并移出创建者函数。返回将被捕获到具有类型删除等的 std::function 的实例中。

但是! R 中的 C/C++ 函数需要属于特定类型,较窄(与较宽相反,您可以捕获将对象缩小对象,但反之则不然)。

因此,我不知道如何从 std::function 生成一个合适的 R 函数,看起来这是不可能的。

也许,像下面这样模拟闭包可能会有所帮助

static int __a;

double ax2(double x) {
return(__a * pow(x, 2));
}

Rcpp::Function createax2Rcpp(int a) {
__a = a;

return (ax2);
}

关于rcpp函数构造一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34994475/

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