Объединение 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");
}
Буду рад услышать ваш отзыв! Я что-то упустил?
(я ранее задавал этот вопрос в другом контексте и удалил старый вопрос, так как он не воспроизводился)