knitr::opts_chunk$set( collapse = TRUE, comment = "#>" )
library(microdatasus)
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)
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.
library(microdatasus) library(tidyverse) library(dbplyr) library(DBI) library(RSQLite)
conn <- dbConnect(RSQLite::SQLite(), "sih.SQLite")
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) } } }
Uma tabela de quantidade de registrosm, por sexo e causa básica
tbl(conn, "sih") %>% group_by(SEXO, COMPLEX) %>% summarise(freq = n()) %>% ungroup() %>% collect()
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.