В R существует возможность иметь функцию, которая создает другую функцию, например.Функция Rcpp для построения функции
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);
}
Это дает мне определение ошибки "здесь не допускается", я зациклился на том, как создать функцию.
EDIT: Вопрос RcppArmadillo pass user-defined function близок, но насколько я могу судить, он предоставляет только способ передачи функции C++ в R. Он не предоставляет способ инициализировать некоторые значения в функции C++ до того, как он передано R.
Это не является проблемой Rcpp, C++ не допускают локальные объявления функций. Таким образом, вам нужно либо определить эту функцию за пределами локальной области, либо обернуть ее в классе. – m0nhawk
@ m0nhawk, конечно, –
@SeverinPappadeux Конечно, я могу использовать 'std :: function' и lambdas, но вы не можете определить их, как в приведенном выше коде. – m0nhawk