R cpp lapply () или mapply () с 5 аргументами - PullRequest
0 голосов
/ 24 марта 2020

У меня есть две функции, которые концептуально похожи на две ниже. Первый строит модель с набором параметров. Вторая строит все модели с 4 параметрами, которые остаются неизменными, а одна представлена ​​в виде списка.

build_one_model <- function(a, b, x, c, d) {
  a + b + x + c + d
}
build_all_models <- function(a, b, xList, c, d) {
  lapply(xList, function(x) build_one_model(a, b, x, c, d))
}

Пример использования:

xList <- list(1, 2, 3)
build_all_models(1, 2, xList, 4, 5)
[[1]]
[1] 13

[[2]]
[1] 14

[[3]]
[1] 15

Теперь я могу преобразовать build_one_model() в Rcpp:

#include <Rcpp.h>
using namespace Rcpp;

//[[Rcpp::export]]
double build_one_model(double a, double b, double x, double c, double d) {
  return a + b + x + c + d;
}

Но как мне конвертировать build_all_models()? lapply() принимает только один вход, а mapply() - до трех, но у меня есть 5.

1 Ответ

0 голосов
/ 24 марта 2020

Я думаю, что могу согласиться с for l oop. Я должен напомнить себе, что я на C ++, а не на R, поэтому циклы for неплохие.

#include <Rcpp.h>
using namespace Rcpp;

//[[Rcpp::export]]
double build_one_model(double a, double b, double x, double c, double d) {
  return a + b + x + c + d;
}

//[[Rcpp::export]]
List build_all_models(double a, double b, List xList, double c, double d) {

  Rcpp::List ans(xList.length());
  for (int i = 0; i < xList.length(); i++) {
    ans[i] = build_one_model(a, b, xList[i], c, d);  
  }
  return ans;
}
xList <- list(1, 2, 3)
build_all_models(1, 2, xList, 4, 5)
[[1]]
[1] 13

[[2]]
[1] 14

[[3]]
[1] 15
...