Download timeout
Por padrão, o R espera que um arquivo seja baixado em até 60 segundos. Ao baixar algum arquivo muito grande ou com uma conexão com a Internet lenta, o tempo necessário para download será maior. Neste caso, você verá uma mensagem de warning semelhante a esta:
1: In utils::download.file(file, temp, mode = "wb", method = "libcurl") :
downloaded length 12260742 != reported length 30474112
2: In utils::download.file(file, temp, mode = "wb", method = "libcurl") :
URL 'ftp://ftp.datasus.gov.br/dissemin/publicos/SINAN/DADOS/FINAIS/DENGBR10.dbc': Timeout of 60 seconds was reached
Para corrigir isto, é bem simples: aumente o tempo de tolerância do R para downloads. Exemplo: tolerância de 2 minutos.
options(timeout = 120)
Download de muitos dados
O download dos dados através do pacote é realizado em memória. Isto significa que cada arquivo baixado do DataSUS é lido e armazenado na memória RAM do computador. Caso você esteja baixando muitos arquivos, para vários estados e anos, você irá precisar de mais memória RAM disponível.
Um modo de contornar este problema é a realizar o download e armazenar os resultados em um banco de dados, como SQLite, DuckDB ou outro. Abaixo segue um exemplo de como fazer isso.
Realiza download e pré-processamento dos dados em loop
anos <- c(2019, 2020)
meses <- 1:12
ufs <- c("AC", "AL", "AP", "AM", "BA", "CE", "DF", "ES",
"GO", "MA", "MT", "MS", "MG", "PA", "PB", "PR", "PE",
"PI", "RJ", "RN", "RS", "RO", "RR", "SC", "SP", "SE",
"TO")
for(ano in anos){
for(mes in meses){
for(uf in ufs){
# Baixa o dado para um ano, mês e UF específico
tmp <- fetch_datasus(
year_start = ano, year_end = ano,
month_start = mes, month_end = mes,
uf = uf, information_system = "SIH-RD"
)
# Pré-processamento dos dados
tmp <- process_sih(data = tmp)
# Escreve na tabela "sih" no banco de dados,
# apensando os dados de cada ano e mês
dbWriteTable(conn = conn, name = "sih", value = tmp, append = TRUE)
# Remove a tabela temporária
rm(tmp)
}
}
}