2014-09-29 5 views
1

현재 Rcpp 사용 방법을 알아 내려고 this 웹 사이트에 나열된 예제를 진행했습니다. 나는 행렬을 포함하는 예제까지 모든 예제를 다룰 수있었습니다. 예를 들어, 다음 코드는 문제를 일으켰습니다. INTEGER()에만 적용 할 수 있습니다 : 나는 다음 작업을 수행 할 때이 어디에 나는 확실히 오류 메시지가Rcpp 기본 숫자 예제 오류

> source('rcpp_test.r') 
    Loading required package: Rcpp 
> x <- matrix(c(1,2,3,4,5,6,7,8,9), byrow=T, nrow=3) 
> test(x) 
    Error in rowSumsC(x) : 
INTEGER() can only be applied to a 'integer', not a 'NULL' 

하지 얻을 이제

# rcpp_test.r  

require(Rcpp) 


test<-function(x){ 

    cppFunction('NumericVector rowSumsC(NumericMatrix x) { 

     int nrow = x.nrow(), ncol = x.ncol(); 

     NumericVector out(nrow); 

     for (int i = 0; i < nrow; i++) { 

     double total = 0; 

     for (int j = 0; j < ncol; j++) { 
      total += x(i, j); 
     } 

     out[i] = total; 
     } 

     return out; 
    }') 

    return(rowSumsC(x)) 
} 

아래에 나열된 .R 파일에 코드를 분리 한 '정수'로 변환하려면 NumericMatrix 객체를 가져 오는 것이 매우 시원 할 것이므로 'NULL'오류가 발생하지 않는 것은 슬픈 일입니다. 어떤 도움이나 조언이

을 감상 할 수있다

편집 :

#include <Rcpp.h> 

using namespace Rcpp; 

// [[Rcpp::export]] 
NumericVector rowSumsC(NumericMatrix x) { 
    int nrow = x.nrow(), ncol = x.ncol(); 
    NumericVector out(nrow); 

    for (int i = 0; i < nrow; i++) { 
    double total = 0; 
    for (int j = 0; j < ncol; j++) { 
     total += x(i, j); 
    } 
    out[i] = total; 
    } 
    return out; 
} 

다음 사물이 작동 : I 파일 /tmp/rowSumC.cpp에 코드를 배치하면 내가 sessionInfo()

> sessionInfo() 

R version 3.1.1 (2014-07-10) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 

locale: 
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C       
[5] LC_TIME=English_United States.1252  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] Rcpp_0.11.2 

loaded via a namespace (and not attached): 
[1] tools_3.1.1 
+0

이 코드는 나를 위해 실행됩니다.'sessionInfo()'를 게시 할 수 있습니까? – nrussell

+0

나는 어떤 과실도 얻지 않는다. 그것을 소싱하지 않고 달리기를 시도 했습니까? 전역 환경에서 함수를 정의한 직후에 바로? –

+0

그래, 난 그걸 시도하고 같은 오류가 발생합니다. RStudio에 문제가 있거나 Rcpp 버전을 너무 많이 사용하고 있습니다. 방금 2 일 전에 모든 것을 다운로드했습니다 (예 : R Studio, Rcpp). – Ockham

답변

3

을 포함했다

괜찮아요 :

R> library(Rcpp) 
R> sourceCpp("/tmp/rowSumC.cpp") 
R> rowSumsC(matrix(1:9,3)) 
[1] 12 15 18 
R> 

아마도 이것은 cppFunction()을 통해 같은 방식으로 작동 할 것입니다.이 기능은 실제로 한두 줄의 짧은 기능을 예약하는 경향이 있습니다.

+0

Windows 환경에서 여전히 동일한 오류가 발생했지만 다른 모든 사람들이 동일한 코드가 작동한다고 말했기 때문에 Mac에서 시도한 결과 작동했습니다! Windows 일 수도 있습니다. - 지금부터 환경과 비슷합니다. – Ockham