R中的动态阵列式结构?

时间:2011-11-21 22:46:49

标签: arrays performance r data-structures append

在R编程语言中,如何获得动态数组(as described on Wikipedia)或等效数据结构?我想要具有以下属性的东西:

  1. O(1)索引。

  2. 摊销O(1)追加。

  3. O(N)或更少浪费的空间。

  4. 输入参数,即可以保存列表,用户定义的对象,函数,矩阵等,而不仅仅是数字。

  5. 应支持无命名追加。因此,使用环境不会削减它。

  6. 据我所知,using a list doesn't work因为以下方式追加一个需要O(N)时间,而不是摊销O(1):

    foo <- list()
    foo[[length(foo) + 1]] <- 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)))
}