2012-12-18 2 views
9

필자는 Python의 목록 및 사전, PHP의 연관 배열 (본질적으로 해시 테이블), C++의 벡터 등의 경험이있는 대중적인 언어에서 사용되는 다양한 데이터 구조에 대해 배우려고 노력했습니다.벡터, 행렬 및 데이터 프레임은 어떻게 R로 구현됩니까?

저는 R을 종교적으로 사용하는 동료가 많이 있습니다. 벡터, 매트릭스 및 데이터 프레임이 R에 어떻게 구현되는지 궁금합니다. 강점과 약점은 무엇입니까? 소스 코드를보고 있지만 데이터 구조 자체를 찾을 수 없습니다. 이 정의는 소스 코드의 어디에 있습니까?

+0

http://cran.r-project.org/doc/manuals/r-release/R-lang.html이 도움이됩니까? (꼭 그런 것은 아닙니다 : 데이터 구조가 어떻게 정의되어 있는지, 구현 방법이 아닌지 ...)) –

+7

'$ R_SRC_HOME/src/main /'에'built_c'에서'do_makevector'를,'array.c'에서'do_matrix'를 찾습니다. data.frames는'data.frame' 클래스의 목록 일 뿐이므로'do_makelist' ('builtin.c'도 포함)를 살펴보고 R에'data.frame'을 입력하여 반환 된 R 코드 콘솔. 전체적인 그림을 보려면 R 매뉴얼이 더 도움이 될 것입니다. 링크 된 @BenBolker와 [ "R-internals"] (http://cran.r-project.org/doc/manuals/R-ints)를보십시오. .html) 설명서. –

+0

@ JoshO'Brien 대답이 아니라 주석 (+1)을해야합니다. –

답변

1

, 1.1 SEXPs : 종종 노드라고 R 객체의

... 기본적인 빌딩 블록 ... 노드 구조의 두 가지 유형은 첫 세 개의 필드는 32 비트 spxinfo로이 머리글 및 다음 세 개의 포인터 (특성 및 이중 연결 목록의 이전 및 다음 노드로)

그래서 R의 벡터는 이중 연결 목록으로 구현됩니다. 또한 단일 노드 링크 된 목록보다 작은 데이터 구조가없는 것처럼 보입니다. 다른 사람에 의해 언급 한 바와 같이

> a <- 4 
> a[1] 
4 

: builtin.cdo_makevectordo_makelist을 가지고 있으며, array.cdo_matrix의 소스를 가지고이에 의해 분명하다. 또한 array.c에는 allocMatrix의 소스가 포함되어 있고 memory.c에는 allocVector의 소스가 들어 있습니다.

많은 일들이 내 머리 위로 떠오르지 만 매트릭스는 단순히 이중 연결 목록의 이중 연결 목록 일뿐입니다. 데이터 프레임에 저장된 행과 열 이름이 각 목록의 '속성'에 저장된다는 것은 확실하지 않습니다.

데이터 구조 구현의 "강점과 약점"에 대한 응답은 (제한된 지식에서) 이중 연결 목록은 동적 메모리 할당이 더 간단하고 전체 배열을 복사하고 재 할당하는 오버 헤드 및 무작위 값 v[99]에 액세스하는 약점은 (머리글, 꼬리, 중간, 분기 등) 얼마나 많은 포인터가 목록에 있는지에 따라 여러 개를 반복하는 오버 헤드를 취할 수 있습니다 원하는 요소 앞에있는 요소가 발견됩니다.

이 정보가 맞습니까?

0

조금 늦었지만 다른 답변 중 하나와 함께 실수를 지적하고 명시적인 대답을주고 싶었습니다. 내부에 설명서를 보면 :

https://cran.r-project.org/doc/manuals/R-ints.html#The-_0027data_0027

이 섹션의 시작, 그리고 'INTSXP'에 대한 항목을 참조하십시오. 그것은 정수 벡터가 C int 배열로 구현 된 것 같습니다. 'REALSXP'및 'CHARSXP'와 유사합니다.

링크드리스트로 구현하는 것은 매우 어려울 것입니다.

관련 문제