Почему моделирование в R потребляет больше памяти, чем возвращаемый объект - PullRequest
0 голосов
/ 31 октября 2018

При выполнении анализа выживаемости в R сообщается, что подгонка модели потребляет больше памяти, чем фактический возвращаемый объект. Более того, кажется, что это происходит только несколько раз, не для каждого случая.

require(survival)
require(pryr)
require(tidyverse)

dat <- tibble(
  x = sample(letters[1:2], 1e5, replace = TRUE),
  x2 = sample(LETTERS[1:2], 1e5, replace = TRUE),
  e = sample(0:1, 1e5, replace = TRUE),
  t = rweibull(1e5, shape = 1)
)

mem_change(fit <- survfit(formula = Surv(t, e) ~ x, data = dat))
mem_change(fit2 <- survfit(formula = Surv(t, e) ~ x, data = dat))
mem_change(fit3 <- survfit(formula = Surv(t, e) ~ 1, data = dat))
mem_change(fit4 <- survfit(formula = Surv(t, e) ~ x2, data = dat))
mem_change(fit5 <- survfit(formula = Surv(t, e) ~ x + x2, data = dat))

map(list(fit, fit2, fit3, fit4, fit5), object_size)
object_size(fit, fit2, fit3, fit4, fit5)

В случае fit и fit5, pryr::mem_change() сообщит об изменении ~ 7,5 МБ, в то время как каждый объект fitX имеет 6,4 МБ, как сообщает pryr::object_size(). Есть ли какие-то скрытые переменные, созданные в другом месте, или это как-то связано с реализацией C под капотом survfit?

Редактировать: Я знаю, что сам процесс моделирования может временно потреблять больше памяти. Однако предполагается, что pryr::mem_change() возвращает чистое изменение в использованной памяти после того, как все вычисления были завершены, и все временные объекты были отброшены.

...