Como instalar a versão DEV no Windows sem Rtools?
Use um binário .zip para Windows fornecido pelo
mantenedor, compatível com a versão e a arquitetura do seu R. Instale
primeiro as dependências e depois o arquivo com
install.packages(file.choose(), repos = NULL, type = "win.binary"),
sem descompactá-lo. A instalação de um arquivo local não instala
dependências automaticamente. Consulte os comandos completos na seção Windows da página inicial.
A instalação pelo GitHub usa o código-fonte e requer Rtools. Para
informar seu ambiente ao solicitar um binário, execute
R.version.string e R.version$arch.
O período e a UF do download são necessariamente os do evento?
Não. Os argumentos de fetch_datasus() selecionam as
partições em que o DataSUS publicou os registros. A pergunta analítica
pode exigir outra dimensão, como município de residência, município de
ocorrência, competência, data da notificação ou data de
encerramento.
Escolha e filtre as variáveis do próprio registro depois do download. Em uma análise de óbitos ocorridos em 2020, por exemplo:
library(microdatasus)
sim_raw <- fetch_datasus(
year_start = 2019,
year_end = 2021,
uf = "AC",
information_system = "SIM-DO"
)
sim <- process_sim(sim_raw)
sim_2020 <- sim[!is.na(sim$DTOBITO) & format(sim$DTOBITO, "%Y") == "2020", ]Os capítulos do livro sobre SIM, SINASC, SIH, SIA, SINAN e CNES explicam quais dimensões temporais e territoriais existem em cada sistema.
Quando devo informar os meses?
SIH, SIA e CNES são mensais e exigem month_start e
month_end. SIM, SINASC e SINAN são anuais; meses informados
para esses sistemas são ignorados com uma mensagem.
Um único mês ainda precisa aparecer nos dois argumentos:
dados <- fetch_datasus(
year_start = 2023,
month_start = 4,
year_end = 2023,
month_end = 4,
uf = "PE",
information_system = "SIH-RD"
)Como aumentar o timeout?
Use timeout em fetch_datasus(),
fetch_cadger() ou fetch_sigtab(). A função
aplica o valor diretamente a cada operação de rede e não altera
options(timeout):
dados <- fetch_datasus(
year_start = 2023,
month_start = 1,
year_end = 2023,
month_end = 1,
uf = "SP",
information_system = "SIA-PA",
timeout = 600
)Falhas transitórias recebem até duas novas tentativas. Aumentar o timeout ajuda com arquivos grandes ou conexões lentas, mas não corrige um arquivo ausente ou inválido.
O que acontece quando apenas parte do download falha?
Com stop_on_error = FALSE, que é o padrão, os arquivos
válidos são retornados e as falhas são resumidas ao final. No modo
padrão, collect = TRUE, o retorno é NULL
quando não há registros a retornar.
dados <- fetch_datasus(
year_start = 2023,
month_start = 1,
year_end = 2023,
month_end = 12,
uf = c("AC", "RO"),
information_system = "SIH-RD",
stop_on_error = FALSE
)
if (is.null(dados)) {
message("Nenhum arquivo foi obtido.")
}Com stop_on_error = TRUE, uma falha de listagem,
download, leitura ou processamento interrompe a chamada. Combinações de
UF e período que não constam da listagem geram avisos em ambos os modos;
confira a cobertura dos resultados.
E quando o computador está sem internet ou o DataSUS está indisponível?
Com stop_on_error = FALSE e collect = TRUE,
fetch_datasus() informa as falhas de conexão com avisos e
retorna NULL quando não há registros a retornar. Verifique
esse retorno antes de chamar uma função process_*(). Ter
acesso à internet não garante acesso ao FTP do DataSUS: o servidor
também pode estar indisponível ou bloquear conexões de determinadas
redes ou países.
Os exemplos de download da ajuda só executam em sessões interativas com acesso à internet. Os testes automáticos usam arquivos locais e conexões simuladas; os testes que acessam o DataSUS precisam ser ativados explicitamente e não executam no CRAN. Assim, os exemplos e testes do pacote não dependem da disponibilidade do servidor. A verificação de links da documentação é separada e ainda pode apontar endereços indisponíveis.
Ter arquivos DBC no cache não torna fetch_datasus()
offline: ela continua consultando as listagens remotas. Use
read_dbc() para arquivos locais ou readRDS()
para resultados salvos. Os processadores podem precisar de dicionários
ainda não armazenados; nesse caso, uma chamada direta pode falhar. Veja
como preparar o cache.
As tabelas de referência incluídas no pacote, como
tabMun, podem ser usadas sem conexão. O pacote também
inclui os arquivos de origem necessários para reconstruir essa
referência municipal.
Como saber de qual arquivo veio cada linha?
Use track_source = TRUE:
dados <- fetch_datasus(
year_start = 2023,
month_start = 1,
year_end = 2023,
month_end = 2,
uf = c("AC", "RO"),
information_system = "SIH-RD",
track_source = TRUE
)
unique(dados$source)Essa coluna é preservada quando vars é usado. A função
não sobrescreve uma coluna source já existente no DBC.
Como reduzir o uso de memória?
Comece selecionando apenas as colunas necessárias:
dados <- fetch_datasus(
year_start = 2022,
year_end = 2022,
uf = "MG",
information_system = "SIM-DO",
vars = c("DTOBITO", "CODMUNRES", "CAUSABAS", "IDADE", "SEXO")
)Para muitos anos, meses ou UFs, baixe lotes menores e grave cada lote
em um banco de dados. Outra opção é
fetch_datasus(process = TRUE, collect = FALSE, destination = "dados"),
que grava um RDS por arquivo e retorna um manifesto. O maior DBC
descomprimido, os dicionários e os objetos temporários ainda devem caber
em memória.
O exemplo abaixo usa SQLite e processa o layout completo antes de selecionar as colunas de saída:
library(DBI)
library(RSQLite)
con <- dbConnect(SQLite(), "sih.sqlite")
grade <- expand.grid(
ano = 2022:2023,
mes = 1:12,
uf = c("AC", "RO"),
stringsAsFactors = FALSE
)
for (i in seq_len(nrow(grade))) {
lote <- fetch_datasus(
year_start = grade$ano[i],
month_start = grade$mes[i],
year_end = grade$ano[i],
month_end = grade$mes[i],
uf = grade$uf[i],
information_system = "SIH-RD",
vars = c("MUNIC_RES", "DT_INTER", "DIAG_PRINC", "SEXO"),
process = TRUE,
process_args = list(municipality_data = FALSE, labels = "character"),
track_source = TRUE,
timeout = 600,
stop_on_error = FALSE
)
if (is.null(lote)) {
next
}
dbWriteTable(
con,
"sih",
lote,
append = dbExistsTable(con, "sih")
)
}
dbDisconnect(con)Consulte depois sem carregar toda a tabela:
Como acelerar o processamento?
As funções já convertem datas repetidas uma vez por campo e formato, restringem o desescape de texto e usam operações vetorizadas em códigos e limites CNV. Essas otimizações não exigem um argumento adicional.
Ative o cache persistente para reutilizar dicionários:
options(microdatasus.cache_dir = datasus_cache_dir(create = TRUE))Desative apenas o que sua análise não precisa:
municipality_data = FALSE omite atributos territoriais, e
diagnostics = FALSE (padrão) evita construir o relatório.
Use labels = "none" se quiser os códigos categóricos. Essa
opção não garante execução sem rede: SIA, CNES e SINAN ainda consultam
os DEFs e podem avaliar suas relações.
Ao medir desempenho, separe a leitura do DBC da primeira chamada do processador e das chamadas com dicionários já em cache. Sempre reutilize a entrada bruta. Consulte o exemplo de medição em Dicionários, cache e processamento em escala.
vars sempre reduz a memória de leitura?
Sem process e sem row_filter, as colunas
solicitadas são selecionadas pelo leitor de DBC. Com processamento ou
filtro, o layout completo é lido e vars seleciona a saída
depois dessas etapas. Isso permite usar campos derivados e conservar as
colunas necessárias às relações históricas. Selecionar poucas colunas de
saída não torna a leitura inicial menor nesse segundo caso.
Quais tipos as funções de processamento retornam?
As funções process_*() mantêm tipos coerentes com o
papel de cada campo. Datas completas são Date; contagens e
componentes de idade são inteiros; valores contínuos podem ser
double; identificadores e texto livre permanecem
character; e campos categóricos são fatores por padrão.
Confira os tipos antes de aplicar transformações específicas da análise:
sim <- process_sim(sim_raw)
class(sim$DTOBITO)
class(sim$IDADEanos)
class(sim$SEXO)Use labels = "character" para devolver descrições
categóricas como texto ou labels = "none" para manter os
códigos de origem. Códigos não cobertos pela relação oficial continuam
visíveis, em vez de serem transformados silenciosamente em
NA. Com diagnostics = TRUE, falhas de coerção
e códigos desconhecidos ficam disponíveis em
processing_diagnostics().
Posso baixar várias UFs de uma vez?
Sim:
dados <- fetch_datasus(
year_start = 2023,
month_start = 1,
year_end = 2023,
month_end = 1,
uf = c("AC", "RO", "AM"),
information_system = "CNES-ST"
)Use uf = "all" para todas as UFs. Não combine
"all" com códigos individuais. Nos sistemas nacionais, como
SINAN, uf é ignorado com um alerta; filtre a variável
territorial do registro depois do download.
O apêndice de códigos de municípios discute códigos IBGE, códigos usados nos SIS e mudanças territoriais.
Como são escolhidos dados atuais, históricos e preliminares?
A escolha é automática para cada período, UF e fragmento. Dados definitivos ou atuais têm prioridade sobre preliminares; cópias atuais têm prioridade sobre diretórios históricos. A função informa quando usa publicações preliminares ou históricas.
Essas versões podem diferir em cobertura, crítica e layout. Para séries temporais, consulte a linha do tempo e os cuidados de interpretação do capítulo correspondente no livro de SIS.
Posso ler um arquivo DBC que já tenho?
Sim:
dados <- read_dbc("arquivo.dbc")Por padrão, todas as colunas são texto. Para manter os tipos inferidos do DBF:
dados <- read_dbc("arquivo.dbc", as_character = FALSE)O pacote descomprime e interpreta o fluxo diretamente, sem criar um
DBF intermediário. Layout, registros e CRC32 são validados antes do
retorno. Use vars para ler somente as colunas necessárias
sem deixar de verificar a estrutura completa do arquivo.
O que fazer diante de aviso de codificação ou caracteres multibyte?
O padrão encoding = "auto" combina o marcador de página
de código do DBF com evidência dos bytes de cada coluna e linha. Texto
identificado com segurança é convertido para UTF-8. Sequências ambíguas
e identificadores binários são preservados sem perda com
Encoding(x) == "bytes" e produzem um aviso.
Se a origem do arquivo for conhecida, um valor explícito exige uma leitura estrita:
dados_cp850 <- read_dbc("arquivo_historico.dbc", encoding = "CP850")Uma sequência incompatível com o encoding informado gera
microdatasus_dbc_encoding_error; nenhum caractere
substituto é inserido. Os cinco bytes indefinidos do Windows-1252 são
tratados da mesma forma no Windows, Linux e macOS. Consulte Formatos DBC, DEF e CNV antes de
forçar uma codificação.
Como são resolvidos códigos repetidos em CNV ou DBF?
O parser usa a última ocorrência física aplicável, como o TabWin. Em CNV, um código posterior substitui o anterior e uma categoria repetida usa sua última descrição não vazia. Em tabelas DBF relacionadas, a última linha com a mesma chave é usada.
Conflitos de chave DBF e divergências entre a quantidade de
categorias declarada e observada no CNV não são ocultados:
datasus_variables() os marca como fallback,
com issue_class e mensagem explicativa. Relações ambíguas
não são escolhidas por aproximação.
Por que o DataSUS não está acessível?
O download depende de acesso FTP ao servidor do DataSUS. Indisponibilidade temporária, bloqueios de rede corporativa e restrições geográficas podem impedir a conexão. Verifique o diagnóstico consolidado da função, tente outro momento ou outra rede e evite múltiplas chamadas paralelas.