#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.