簡體   English   中英

帶有 5 個參數的 Rcpp lapply() 或 mapply()

[英]Rcpp lapply() or mapply() with 5 arguments

我有兩個函數,它們在概念上類似於下面的兩個函數。 第一個構建具有一組參數的模型。 第二個構建所有模型,其中 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 個。

我想我可以用for循環解決。 我必須提醒自己,我使用的是 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM