将 Rcpp 函数与 mapply 一起使用时出现索引越界错误
Index out of bounds error when using Rcpp function with mapply
当我将 mapply
与 Rcpp 函数一起使用时,我得到 "Error: index out of bounds"
:
R:
mapply(fun, x = totPrimas, y = factorProjec, w = totCurvadf)
x
、y
和z
是具有相同维度的数据框。
Rcpp:
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
NumericVector fun(const NumericVector x, const NumericVector y, const NumericVector w ) {
NumericVector z(x.size());
z(0) = x(0) * y(0);
NumericVector c(x.size());
c(0) = x(0) * w(0);
for(int i = 1; i < x.size(); i++) {
c(i) = (c(i-1) + x(i)) * w(i);
z(i) = c(i) * y(i);
}
return z;
}
代码有问题吗?非常感谢。
如您所述,问题在于 totCurvadf
是一个矩阵。这是一个问题的原因是 aMatrix[1]
将 return 长度为 1 的向量,而 aDataFrame[1]
将 return data.frame 的第一列作为向量长度等于 nrow(aDataFrame)
.
如果您确实想对矩阵(或数据框和矩阵的混合)执行此操作,您可以执行以下操作:
lapply(1:nrow(totPrimas), function(i) fun(x = totPrimas[, i], y = factorProjec[, i], w = totCurvadf[, i]))
当我将 mapply
与 Rcpp 函数一起使用时,我得到 "Error: index out of bounds"
:
R:
mapply(fun, x = totPrimas, y = factorProjec, w = totCurvadf)
x
、y
和z
是具有相同维度的数据框。
Rcpp:
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
NumericVector fun(const NumericVector x, const NumericVector y, const NumericVector w ) {
NumericVector z(x.size());
z(0) = x(0) * y(0);
NumericVector c(x.size());
c(0) = x(0) * w(0);
for(int i = 1; i < x.size(); i++) {
c(i) = (c(i-1) + x(i)) * w(i);
z(i) = c(i) * y(i);
}
return z;
}
代码有问题吗?非常感谢。
如您所述,问题在于 totCurvadf
是一个矩阵。这是一个问题的原因是 aMatrix[1]
将 return 长度为 1 的向量,而 aDataFrame[1]
将 return data.frame 的第一列作为向量长度等于 nrow(aDataFrame)
.
如果您确实想对矩阵(或数据框和矩阵的混合)执行此操作,您可以执行以下操作:
lapply(1:nrow(totPrimas), function(i) fun(x = totPrimas[, i], y = factorProjec[, i], w = totCurvadf[, i]))