在R编程语言中,如何获得动态数组(as described on Wikipedia)或等效数据结构?我想要具有以下属性的东西:
O(1)索引。
摊销O(1)追加。
O(N)或更少浪费的空间。
输入参数,即可以保存列表,用户定义的对象,函数,矩阵等,而不仅仅是数字。
应支持无命名追加。因此,使用环境不会削减它。
据我所知,using a list doesn't work因为以下方式追加一个需要O(N)时间,而不是摊销O(1):
foo <- list()
foo[[length(foo) + 1]] <- 1
答案 0 :(得分:3)
不是每次都附加到列表,而是使用固定长度预分配。然后,当列表已满时,根据维基百科文章中的描述加倍。这应该会给你你所追求的表现。
foo <- vector("list", 1000)
# populate the list, with N >> 1000...
for(i in seq(N))
{
foo[[i]] <- ...
# if the list is full, extend it
if(i == length(foo))
foo <- c(foo, vector("list", length(foo)))
}