Замедляет ли код использование comment() из base для присвоения информации объекту R?

#r

#r

Вопрос:

comment() Замедляет ли код использование from base для присвоения информации объекту R?

То есть следует ли использовать его реализацию осторожно?

Контекст: у меня есть функция, которая создает несколько блоков / фреймов данных, которые сохраняются в списке; и я подумываю о сохранении комментария к каждому фрейму данных (или просто сохранении одного комментария ко всему списку).

Комментарии:

1. В comment документации указано, что функция устанавливает или получает атрибут comment для любого объекта R, поэтому я не верю, что итеративное использование его на нескольких объектах значительно замедлит ваш код (сейчас выполняется тест). О скольких фреймах данных мы говорим?

Ответ №1:

Из comment документации кажется, что метод — это просто интерфейс для получения / установки атрибута комментария для любого объекта R. Я не вижу, чтобы это становилось бременем в подавляющем большинстве случаев реального использования.

Чтобы иметь представление о том, как функция ведет себя под нагрузкой, я написал простую функцию для генерации n фреймов данных (2000 строк, 3 столбца) и аннотирования их по желанию. Результаты будут добавлены в список:

 df_and_comment <- function(n, add_comment = FALSE) {
  res_list <- list()
  for (i in seq(1:n)) {
    x <- data.frame(
      x = rnorm(2000),
      y = rnorm(2000),
      z = rnorm(2000)
    )
    if (add_comment) {
      comment(x) <- sprintf("this is df no: %d", i)
    }
    res_list[[i]] <- x
  }
  res_list
}
  

Нормальная загрузка — создание 50 фреймов данных

 library(microbenchmark)

microbenchmark(
  df_and_comment(n=50),
  df_and_comment(n=50, add_comment = TRUE),
  times = 10
)

Unit: milliseconds
                                       expr      min       lq     mean   median       uq      max neval
                     df_and_comment(n = 50) 25.34398 25.51473 26.70731 25.74472 25.97483 33.81251    10
 df_and_comment(n = 50, add_comment = TRUE) 26.32009 26.39826 27.49835 26.60218 27.80038 32.47273    10
  

Большая нагрузка — создание 15.000 фреймов данных

 microbenchmark(
  df_and_comment(n=15000),
  df_and_comment(n=15000, add_comment = TRUE),
  times = 10
)

Unit: seconds                                          expr      min       lq     mean   median       uq      max neval
                     df_and_comment(n = 15000) 8.218535 8.254919 8.324075 8.317126 8.354637 8.469191    10
 df_and_comment(n = 15000, add_comment = TRUE) 8.414405 8.561279 8.687380 8.571137 8.685309 9.591972    10
  

В обоих случаях разница в производительности совершенно незначительна. Я бы не беспокоился о последствиях для производительности итеративного аннотирования результатов dataframes / regression.