2015-06-29 4 views
-1

я получаю «Ошибка: индекс вне границ», когда я использую mapply с функцией Rcpp:Rcpp ошибка: индекс вне границ

R:

mapply(fun, x = totPrimas, y = factorProjec, w = totCurvadf) 

х, у и г являются данные кадры с одинаковыми размерами.

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

Я не понимаю «х, у и г являются данные кадры с той же размеры. «Как это относится к вашему коду? – Roland

+1

Я не вижу индекса, выходящего за пределы кода C++. Таким образом, проблема, вероятно, в том, что вы переходите к' fun' через 'mapply'. Следовательно, моя просьба для уточнения – 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])) 
Смежные вопросы