У меня есть список под названием prebindgames
с чуть более 2 миллионами записей Каждая запись списка представляет собой однорядный фрейм данных с 6 столбцами. Чтобы дать представление о типе данных в каждом столбце, каждый фрейм данных имеет форму:
data.frame(Time = double(),
HScore = numeric(),
AScore = numeric(),
HTeam = character(),
ATeam = character(),
GameID = character(),
stringsAsFactors = FALSE)
Числовые столбцы не превышают тысяч, а символьные столбцы не превышают 10 символов. Я попытался запустить do.call(rbind, prebindgames)
, и он работал всю ночь без признаков остановки. Я попытался еще раз для некоторых меньших значений:
start_time <- Sys.time()
allgamespbp <- do.call(rbind, prebindgames[1:1000])
end_time <- Sys.time()
print(end_time - start_time)
Time difference of 1.059694 secs
prebindgames[1:10000]
Time difference of 11.00168 secs
prebindgames[1:20000]
Time differences of 37.30913 secs
Итак, я уже наблюдаю некоторый экспоненциальный рост, который объясняет, почему вещи выходят из-под контроля при попытке связать все 2 миллиона за один вызов. Итак, мои три вопроса:
1) Это нормально? Если бы я основывал свою ожидаемую скорость на списке с 10 тысячами записей, это заняло бы около 40 минут для 2 миллионов
2) Что я могу сделать, чтобы ускорить этот процесс? Из того, что я могу сказать, замена значений в списке заданной длины с использованием do.call является наиболее эффективным способом связать строки вместе.
3) Если это так быстро, как я могу, получить его без существенных изменений в моем коде или оборудовании, могу ли я изменить его, чтобы посмотреть мой прогресс?
Предыстория: это для веб-проекта, где я объединю результаты многих игр NBA в один большой стол. Весь код можно найти здесь: https://github.com/NicholasHassan/NBAComeback
Если вам интересно, вы можете перейти к строке 54 из NBA Comeback.R
и использовать pbpurls.csv
, чтобы увидеть, как происходит процесс очистки.