Динамическая массивоподобная структура в R? - PullRequest
3 голосов
/ 22 ноября 2011

В языке программирования R как получить динамический массив (, как описано в Википедии ) или эквивалентную структуру данных? Я хочу что-то со следующими атрибутами:

  1. O (1) индексация.

  2. Амортизированный O (1) доп.

  3. O (N) или меньше пустого пространства.

  4. Тип параметрический, т. Е. Может содержать списки, пользовательские объекты, функции, матрицы и т. Д., А не только числа.

  5. Добавление без имен должно поддерживаться. Следовательно, использование среды не приведет к ее снижению.

Из того, что я могу сказать, использование списка не работает , поскольку добавление к следующему пути занимает O (N) времени, а не амортизируется O (1):

foo <- list()
foo[[length(foo) + 1]] <- 1

1 Ответ

3 голосов
/ 22 ноября 2011

Вместо добавления в список каждый раз, предварительно выделите его с фиксированной длиной.Затем, когда список полон, удвойте его, как описано в статье в Википедии.Это должно дать вам производительность, которую вы хотите.

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)))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...