Rのリンクリストは、ベクトルとして表すことができます。通常、list
です。次のアイテムと前のアイテムを参照するための特別なコードを書く必要はありません。これは、Rがインデックス作成のために行うためです。
リストに新しい項目を追加するには、その長さを追跡し、次の行に割り当てます。
lst <- list() # creates an empty (length zero) list
lst[[1]] <- 1 # automagically extends the lst
lst[[2]] <- 2 # ditto
これは、Rがメモリを扱う方法のために、長いリストでは効率が悪いことがあります。可能であれば、事前にリストを作成し、利用可能になったときにその内容を割り当てます。
リストから項目を削除
lst <- list(1, 2, 3, 4, 5) # a list of 5 items
lst <- vector("list", 10000) # 10000 NULLs
lst[[1]] <- 1
lst[[10000]] <- 10000 # lst now contains 1, NULL, ..., NULL, 10000
は負のインデックスを用いて達成することができます。
lst <- list(1, 2, 3, 4, 5)
lst <- lst[-2] # now contains 1, 3, 4, 5
ツリーは他のリストを含む単なるリストです。
tree <- list(list(1, 2), list(3, list(4, 5)))
# left child: list(1, 2)
tree[[1]]
# right child
tree[[2]]
# right child of right child:list(4, 5)
tree[[2]][[2]]
デフォルトでは、構造体には強制的な強制はありません。たとえば、バイナリツリーのノードあたり2つのみの子があります。より構造化されたアプローチはS4クラスを介して利用可能ですが、これはピンチで仕事をします。
ここでは、1)?parilist 2) 'R Internals'マニュアルと 'Writing R Extensions'マニュアルで 'weak reference'と 'external pointer'を検索してください。 –