, 1.1 SEXPs : 종종 노드라고 R 객체의
... 기본적인 빌딩 블록 ... 노드 구조의 두 가지 유형은 첫 세 개의 필드는 32 비트 spxinfo로이 머리글 및 다음 세 개의 포인터 (특성 및 이중 연결 목록의 이전 및 다음 노드로)
그래서 R의 벡터는 이중 연결 목록으로 구현됩니다. 또한 단일 노드 링크 된 목록보다 작은 데이터 구조가없는 것처럼 보입니다. 다른 사람에 의해 언급 한 바와 같이
> a <- 4
> a[1]
4
: builtin.c
이 do_makevector
및 do_makelist
을 가지고 있으며, array.c
는 do_matrix
의 소스를 가지고이에 의해 분명하다. 또한 array.c
에는 allocMatrix
의 소스가 포함되어 있고 memory.c
에는 allocVector
의 소스가 들어 있습니다.
많은 일들이 내 머리 위로 떠오르지 만 매트릭스는 단순히 이중 연결 목록의 이중 연결 목록 일뿐입니다. 데이터 프레임에 저장된 행과 열 이름이 각 목록의 '속성'에 저장된다는 것은 확실하지 않습니다.
데이터 구조 구현의 "강점과 약점"에 대한 응답은 (제한된 지식에서) 이중 연결 목록은 동적 메모리 할당이 더 간단하고 전체 배열을 복사하고 재 할당하는 오버 헤드 및 무작위 값 v[99]
에 액세스하는 약점은 (머리글, 꼬리, 중간, 분기 등) 얼마나 많은 포인터가 목록에 있는지에 따라 여러 개를 반복하는 오버 헤드를 취할 수 있습니다 원하는 요소 앞에있는 요소가 발견됩니다.
이 정보가 맞습니까?
http://cran.r-project.org/doc/manuals/r-release/R-lang.html이 도움이됩니까? (꼭 그런 것은 아닙니다 : 데이터 구조가 어떻게 정의되어 있는지, 구현 방법이 아닌지 ...)) –
'$ 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) 설명서. –
@ JoshO'Brien 대답이 아니라 주석 (+1)을해야합니다. –