2017-11-07 2 views
0

참조로 데이터 프레임을 전달하고 여기에 열을 추가하려고합니다. 내 계획은 이런 식으로 행을 추가하는 것입니다.Rcpp : 참조로 데이터 프레임에 행 추가

내 코드는 지금까지 아래 주어 sourceCpp와 오류없이 컴파일되어

- 그러나, 나는이 같은 기능을 실행할 수 없습니다 :

lst <- list("a"=c("aone", "atwo"), "b"=c("bone","btwo")) 
mainFunc(lst) 

mainFunc이 정의되지 하더군요을, 그래서 나는 의심 코드는 어떻게 든 올바르지 않습니다

#include <Rcpp.h> 

using namespace Rcpp; 


class C 
{ 
public: 
    void test(Rcpp::DataFrame& df, Rcpp::List y) 
    { 

    int n = y.size(); 
    for(int i = 0; i<n; ++i) 
    { 
     List sublist = y[i]; 
     int m = sublist.size(); 
     for(int j = 0; j<m; ++j) 
     { 
     CharacterVector sublist_element = sublist[j]; 

     df[sublist_element] = sublist_element; 
     } 
    } 

    } 
}; 

// [[Rcpp::export]] 
XPtr<C> mainFunc(Rcpp::List y) 
{ 
    XPtr<C> ptr(new C(), true); 

    DataFrame df; 

    ptr->test(df, y); 
    return(ptr); 
} 

그래서 mainFunc에 값을 추가/mainFunc에 dataframe를 작성하고 추가 할 수 있습니다?

답변

1

이전에 답변을 받았지만 참고 자료가 없기 때문에 편리합니다. 본질적으로 :

  • data.frame는 벡터의 목록이 단지이 벡터의 집합을 볼 수있는 C++ 수준에서
  • 그래서 당신은 기본적으로 각 벡터에
  • 를 삽입하고 크기를 조정해야 당신은 당신이 알고 그래서 만약 당신이 재 할당 할 필요가 및 콘텐츠를 복사 할 필요

크기 조정은 비싼입니다 말하자면, 삽입하는 열은 한 번만 수행하면됩니다.

+0

감사합니다. Dirk. 'data.frame' 대신'List'를 사용하는 것이 더 효율적입니까? 또는 내가 변환하는 C++의 일부 기본 구조는 무엇입니까? 나는 최종 크기를 미리 알지 못한다 :-( – N08

+1

우리가 이것을 할 때 (예를 들어 Rblpapi를 보라) 우리는'std :: vector'를 한 줄씩 늘리고 마지막에'data.frame'을 변환하여 만든다. –

+0

지금 Rblpapi의 소스 파일을보고 있지만 꽤 많이 있습니다 -이 변환이 일어나는 곳으로 나를 가리켜 주시겠습니까? 미리 감사드립니다. – N08

관련 문제