2015-06-29 105 views
-1

我得到 「錯誤:索引越界」 當我使用mapply具有RCPP功能:RCPP錯誤:索引越界

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; 
} 

是一些錯誤的代碼?非常感謝。

+1

我不明白「x,y和z是數據與同一幀維度「。這與你的代碼有什麼關係? – Roland

+1

我看不到索引超出了C++代碼的範圍,所以,這個問題可能是你通過'mapply'傳遞給'fun'的原因。爲了澄清 – Roland

+0

謝謝,我檢查了輸入,你是對的。「w」是一個矩陣,我將它轉換爲data.frame並且工作正常,謝謝! –

回答

1

正如你所說的,問題是totCurvadf是一個矩陣。這是一個問題的原因是aMatrix[1]將返回長度爲1的向量,而aDataFrame[1]將返回data.frame的第一列作爲等於nrow(aDataFrame)長度的向量。

如果你確實想用矩陣(或數據幀和矩陣的混合物,要做到這一點,你可以這樣做:

lapply(1:nrow(totPrimas), function(i) fun(x = totPrimas[, i], y = factorProjec[, i], w = totCurvadf[, i]))