在R中滚动您自己的链表/树?

在R中滚动您自己的链表/树?,r,pointers,data-structures,linked-list,reference,R,Pointers,Data Structures,Linked List,Reference,我正试图了解R编程语言的基本概念,我发现这很困难,因为R是面向统计的,而不是通用编程。我找不到任何类似于指针/引用的东西。如何在R语言中实现链表、搜索树等 注意:我理解,如果您实际上在R中滚动您自己的自引用数据结构,那么可能有更好的方法来完成您试图完成的任务。然而,我相信答案会帮助我更好地理解语言的整体结构和概念 编辑:关于Matt Shotwell的评论,这个问题的要点是,我希望在R中清晰地编写链表和树,而不是用C或其他语言编写的扩展。把它作为一个扩展,或是弄乱解释器的神秘细节,这都是徒劳的。

我正试图了解R编程语言的基本概念,我发现这很困难,因为R是面向统计的,而不是通用编程。我找不到任何类似于指针/引用的东西。如何在R语言中实现链表、搜索树等

注意:我理解,如果您实际上在R中滚动您自己的自引用数据结构,那么可能有更好的方法来完成您试图完成的任务。然而,我相信答案会帮助我更好地理解语言的整体结构和概念


编辑:关于Matt Shotwell的评论,这个问题的要点是,我希望在R中清晰地编写链表和树,而不是用C或其他语言编写的扩展。把它作为一个扩展,或是弄乱解释器的神秘细节,这都是徒劳的。

R中的链表可以表示为一个向量,通常是一个
列表。您不需要编写特殊代码来引用下一个和上一个项目,因为R通过索引为您完成这项工作

要向列表中添加新项目,只需跟踪其长度并分配给下一行即可

lst <- list() # creates an empty (length zero) list
lst[[1]] <- 1 # automagically extends the lst
lst[[2]] <- 2 # ditto

lst这里有几条线索:1)?对比列表2)在“R内部”手册和“编写R扩展”手册中搜索“弱引用”和“外部指针”。在内部级别,列表
只是一种向量。
pairlist
是一个真正的链表。@Joshua:是的,但是对于大多数你想要链表的事情来说,一个常规的
链表可以很好地工作,并且不那么晦涩,特别是对于R新手来说。@HongOoi:我完全同意。我只是指出,从技术上讲,列表向量不是链表。你表明你可以把它作为一个整体来使用,但这不是内部发生的事情。@Joshua:很公平,我会编辑答案来澄清我的意图。
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]]