2015-01-26 5 views
2

Rcpp 함수에서 정수 벡터를 인쇄하려면 어떻게합니까? 제 기능상, IntegerVectora을 인쇄하고 싶습니다. RI에서 다음 줄을보십시오 예를 compnz_next(5,3,c(1,2,2))Rcpp 함수에서 정수 벡터 인쇄

#include <Rcpp.h> 

using namespace Rcpp; 

// [[Rcpp::export]] 
IntegerVector compnz_next(int n, int k, IntegerVector a) { 
    bool more = true; 
    int i; 
    static int h = 0; 
    static int t = 0; 

    for (i = 0; i < k; i++) { 
    a[i] = a[i] - 1; 
    } 
    if (1 < t) { 
    h = 0; 
    } 

    h = h + 1; 
    t = a[h-1]; 
    a[h-1] = 0; 
    a[0] = t - 1; 
    a[h] = a[h] + 1; 

    more = (a[k-1] != (n - k)); 
    Rcout << "a vector is:" << more << std::endl; 
    for (i = 0; i < k; i++) { 
    a[i] = a[i] + 1; 
    } 

    return a; 
} 

답변

10

에 사용이 함수를 호출하고 있습니다 : 완성도를 들어

Rf_PrintValue(a); 
+0

완벽하게 작동합니다. 'Rf_PrintValue'에 대한 일부 문서를 Google에 보내려고했지만 유용한 것은 없습니다. 이 기능의 출처는 어디입니까? –

+4

'Rcpp.h'에 의해 꺼내 진'RcppCommon.h'에 의해 꺼내 진'Rinternals.h' 헤더에 선언되어 있습니다. –

5

, 그리고 잠시 후에, 우리는 지금이 더 많은 옵션이 있습니다

R> library(Rcpp) 
R> cppFunction('void printVector(IntegerVector v) { print(v); } ') 
R> printVector(c(1L, 3L, 5L)) 
[1] 1 3 5 

이것은 Rf_PrintValue() 기능을 R에서 print() 기능으로 쉽게 바꿉니다.

R> cppFunction('void printVector2(IntegerVector v) { 
+    Rcpp::Rcout << v << std::endl; } ') 
R> printVector2(c(1L, 3L, 5L)) 
1 3 5 
R> 

제 (최신) 함수는 우리가 다른 C++와 같은 종류 << 사용할 수 있도록하는 적절한 operator()<< 통해 구현된다. 또한 숫자 벡터와 행렬에도 적용됩니다.