2015-05-20 2 views
2

Я пытаюсь создать пакет с функцией, выполняющей простую свертку с использованием RCpp. Код выглядитRCpp: ожидающая ошибка с одним значением

#include <Rcpp.h> 
using namespace Rcpp; 

// [[Rcpp::export]] 
NumericVector conv_filter(NumericVector x, NumericVector c){ 
    int T = x.size(); 
    int M = (c.size()-1)/2; 
    int t, i;  
    NumericVector fx(T); 
    for(t=0; t<T; t++){ 
     for(i=-M; i<M+1; i++){ 
      if(t+i>=0 && t+i<T){ 
     fx(t) += c(M+i)*x(t+i); 
      } 
     }  
    } 
    return fx; 
} 

, который работает хорошо, когда получены, но когда встроенный в пакет, я получаю ошибки, говоря «ожидает одно значение». Наверное, я совершил очень простые ошибки, но не могу понять, откуда он появился, даже после прочтения соответствующих тем. Большое спасибо за вашу помощь.

ответ

2

Ваша программа работает для меня:

R> Rcpp::sourceCpp("/tmp/hrcho.cpp") 

R> conv_filter(1:4, 4:1) 
[1] 7 16 25 24 
R> 

с помощью этого (только с отступом) исходный код:

#include <Rcpp.h> 
using namespace Rcpp; 

// [[Rcpp::export]] 
NumericVector conv_filter(NumericVector x, NumericVector c){ 
    int T = x.size(); 
    int M = (c.size()-1)/2; 
    int t, i;  
    NumericVector fx(T); 
    for(t=0; t<T; t++){ 
    for(i=-M; i<M+1; i++){ 
     if(t+i>=0 && t+i<T){ 
     fx(t) += c(M+i)*x(t+i); 
     } 
    }  
    } 
    return fx; 
} 

/*** R 
conv_filter(1:4, 4:1) 
*/ 
+0

Спасибо. Да, когда я получил его, он работал отлично, но когда он упакован, ошибка об одном значении была выбрана. Отказ был выключен, когда я скопировал код, вероятно .. спасибо, что посмотрели. – hrcho