は、1.1 SEXPs:
は... Rオブジェクトの基本的なビルディングブロックは、多くの場合、ノードと呼ばれ...ノード構造の両方のタイプは、その最初の3つのフィールドの32ビットとして持つspxinfo (アトリビュートと二重リンクリストの前後のノードに)
したがって、Rのベクトルは二重リンクリストとして実装されています。さらに、単一ノードのリンクされたリストよりも小さいデータ構造は存在しないように見えます。他の人が述べたように
> a <- 4
> a[1]
4
:builtin.c
はdo_makevector
とdo_makelist
を有し、array.c
はdo_matrix
のソースを有し、これはによって明らかです。加えて、array.c
はallocMatrix
のソースを含み、memory.c
はallocVector
のソースを含んでいます。
多くのことが私の頭の中にありましたが、マトリックスは単なる二重にリンクされたリストの二重リンクのリストであることが明らかです。私は確信していますが、行と列の名前(データフレームに格納されているものなど)は各リストの '属性'に格納されています。
データ構造の実装の「長所と短所」に対する応答は、(私の限られた知識から)二重にリンクされたリストは、動的メモリ割り当てがより簡単であり、配列全体のコピーと再割り当てのオーバーヘッドと、ランダム値にアクセスする弱点(リストに含まれるポインタの数に応じて、頭、尾、中、四半期など)が複数回繰り返すオーバーヘッドを取ることがあります所望のものの前の要素が見つかる。
これは間違いありませんか?
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)。 –