Объединение кадров данных в R4.0.0 в 60 раз медленнее, чем R3.6.3? - PullRequest
2 голосов
/ 08 мая 2020

Объединение 2 кадров данных в R4.0.0 происходит намного медленнее, чем в R.3.6.3.

Воспроизводимый пример :

library(reshape2)

n <- matrix(1:6000000, nrow=15000, ncol=400)
colnames(n) <- 1:ncol(n)

meta <- data.frame("col1" = ncol(n):1, row.names = colnames(n))
start_time <- Sys.time()
test = sapply(1:nrow(n), 
               function(i) {
                 print(i)
                 nn = reshape2::melt(n[i,])
                 tmp = merge(nn, meta, by="row.names");
               }
)
end_time <- Sys.time()
end_time-start_time

Этот код занимает 23 секунд в R3.6.3 и 23 минуты в R4.0.0 (на моей машине) - что делает слияние в 60 раз медленнее ! Функция «растопить» не требует много времени.

Эта проблема также не связана с sapply. Вы можете воспроизвести экстремальную разницу в скорости, используя для l oop:

for(i in 1:nrow(n)){
  print(i)
  nn = reshape2::melt(n[i,])
  tmp = merge(nn, meta, by="row.names");
}

Буду рад услышать ваш отзыв! Я что-то упустил?

(я ранее задавал этот вопрос в другом контексте и удалил старый вопрос, так как он не воспроизводился)

1 Ответ

2 голосов
/ 10 мая 2020

Это на самом деле ошибка в R4.0.0.

Я отправил его в R-core (https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17794) и обновлю здесь, как только он появится исправлено.

Обновление Ошибка была исправлена ​​ командой R (спасибо Мартину Мехлеру!), уже развернута в R-devel, и исправление будет включено в следующую версию выпуска R.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...