带有 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
我有两个函数,它们在概念上类似于下面的两个。第一个构建具有一组参数的模型。第二个构建所有模型,其中 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