Estava rodando o elections_tse para pegar votação por zona e estava dando o seguinte erro para qualquer ano tentado:
Error in `data.table::rbindlist()`:
! Item 2 has 38 columns, inconsistent with item 1 which has 1 columns. To fill missing columns use fill=TRUE.
Hide Traceback
▆
1. ├─base::lapply(...)
2. │ └─global FUN(X[[i]], ...)
3. │ └─electionsBR::elections_tse(year = ano, type = "vote_mun_zone")
4. │ └─electionsBR:::vote_mun_zone(...)
5. │ └─electionsBR:::juntaDados(uf, encoding, br_archive)
6. │ └─... %>% dplyr::as_tibble()
7. ├─dplyr::as_tibble(.)
8. └─data.table::rbindlist(.)
Fiz um debug e descobri que havia o problema acontecia dentro da função juntaDados(). Descobri que quando ele lista os arquivos csvs a serem juntados na pasta criada (e onde os arquivos do TSE são baixados), o primeiro elemento da lista acabava sendo o arquivo de sistema desktop.ini. A função interna juntaDados() utiliza a função Sys.glob("*") para listar arquivos no diretório e a lógica de filtragem atual permite que o desktop.ini seja incluído no objeto archive. Como esse arquivo não possui o formato esperado (não é um csv) a função gera um erro ao tentar processá-lo como um arquivo de dados e juntar ao segundo arquivo.
O filtro existente busca excluir arquivos .pdf e validar o tamanho do arquivo, mas o desktop.ini passa por essas validações.
# Lógica atual com o erro
archive <- Sys.glob("*")[grepl(".pdf", Sys.glob("*")) == FALSE] %>%
.[grepl(uf, .)] %>%
file.info() %>%
.[.$size > 200, ] %>%
row.names()
Sugiro adicionar um filtro explícito para excluir o arquivo desktop.ini, utilizando ignore.case = TRUE para garantir a compatibilidade, já que o Windows não diferencia maiúsculas de minúsculas.
# Lógica corrigida
archive <- Sys.glob("*")[grepl(".pdf", Sys.glob("*")) == FALSE] %>%
.[grepl("desktop\\.ini", ., ignore.case = TRUE) == FALSE] %>% # Filtro adicional
.[grepl(uf, .)] %>%
file.info() %>%
.[.$size > 200, ] %>%
row.names()
Não sei se esse é um problema geral, ou se acontece apenas no meu computador. De qualquer forma, fica a sugestão.
Estava rodando o elections_tse para pegar votação por zona e estava dando o seguinte erro para qualquer ano tentado:
Fiz um debug e descobri que havia o problema acontecia dentro da função
juntaDados(). Descobri que quando ele lista os arquivos csvs a serem juntados na pasta criada (e onde os arquivos do TSE são baixados), o primeiro elemento da lista acabava sendo o arquivo de sistemadesktop.ini. A função internajuntaDados()utiliza a funçãoSys.glob("*")para listar arquivos no diretório e a lógica de filtragem atual permite que odesktop.iniseja incluído no objetoarchive. Como esse arquivo não possui o formato esperado (não é um csv) a função gera um erro ao tentar processá-lo como um arquivo de dados e juntar ao segundo arquivo.O filtro existente busca excluir arquivos
.pdfe validar o tamanho do arquivo, mas odesktop.inipassa por essas validações.Sugiro adicionar um filtro explícito para excluir o arquivo
desktop.ini, utilizandoignore.case = TRUEpara garantir a compatibilidade, já que o Windows não diferencia maiúsculas de minúsculas.Não sei se esse é um problema geral, ou se acontece apenas no meu computador. De qualquer forma, fica a sugestão.