Я пытаюсь заставить векторную переработку работать в Rcpp.
> recycle_and_add <- Rcpp::cppFunction("
+ NumericVector recycle_and_add(NumericVector x, NumericVector y) {
+ return x + y;
+ }")
> recycle_and_add(42, 1:5)
[1] 43
Я ожидаю, что он вернет что-то вроде
> 42 + 1:5
[1] 43 44 45 46 47
После некоторого анализа я обнаружил, что x.size()
- это 1
, а y.size()
- это 5
в функции Rcpp, поэтому очевидно, что рециркуляция векторов не работает "из коробки".
Хотя я могу вручную найти самый длинный из x
и y
и перезапустить более короткий, в реальном приложении есть 3 или 4 аргумента, требующих переработки, поэтому я могу представить, что ручное развертывание приведет к множеству переменных указывая на разные векторы и превратить код в кучу спагетти.
Имеет ли Rcpp встроенную поддержку для переработки векторов, например, с небольшим количеством сахара?