Geobr problemas para criar objeto a partir do read_

Boa tarde a todos !!

Dentro de uma estrutura de loop eu preciso , de acordo com a loop fazer uma seleção e criar um objeto.

Ao ler o Geobr , tudo funciona bem, porém não consigo criar um objeto , o caso é exatamente esse :

trib_Florestas$UF é a varaável que depende o Loop

#escrito desta forma, funciona , mas não me permite criar um objeto.
read_municipality( code_muni = trib_Florestas$UF, year=2010 )

#Criar um objeto, desta forma não funciona
FlorestaUF < - read_municipality( code_muni = trib_Florestas$UF, year=2010 )

#Criar um objeto, desta forma funciona (trib_Florestas$UF = “AC” )
FlorestaUF < - read_municipality( code_muni = “AC”, year=2010 )

Alguém saberia me explicar como resolver ??

Atenciosamente

Julio Cezar

Oi Julio,

Se eu entendi bem o seu problema, acho que se você substituir

FlorestaUF[i] < - read_municipality(code_muni = trib_Florestas$UF[i], year=2010)

Pode ser que funcione, sendo que o ‘i’ é a variação do seu ‘for’

Abraços

1 Curtida

primojr, bom dia !!

Eu resolvi !

< FlorestaUF ← read_municipality( code_muni = trib_Florestas$UF, year=2010 ) >

Obrigado pela ajuda !!

sds

JulioGis

Primojr, boa tarde !

Sobre o problema , ele resolveu de forma parcial -
FlorestaUF < - read_municipality( code_muni = trib_Florestas$UF, year=2010)
UCsmap < - read_municipality( code_muni = trib_UCsmap$UF, year=2010) ou outro qualquer ( Florestas, Unidades de Conservação, etc) ele cria o objeto , mas só para a primeira iteração, que no meu caso AC, mas ele não varia para os demais Estados , SP, RJ, etc… dá o erro - Error in if (code_muni == “all”) { : argument is of length zero

Você saberia me responder ?

Obrigado

Rapaz, um dúvida aqui. Qual o objetivo do seu código? Com este comando, você está passando um vetor que (parece) ter várias UF (trib_Florestas$UF), mas o geobr vai baixar só a primeira do vetor.

Você tem que pensar sobre a solução citada acima, considerando o loop que você citou ou use aluma opção do map do pacote purrr.

Sem ver o código todo, dá uma dúvida do todo.

Pense nisso.

Denis, bom dia !

O trecho de código abaixo mostra o caso .

Eu tenho um dataset ou objeto “trib_DesmatMunic_Prodes” ou “trib_Florestas” na realidade eu tenho 07 “trib_xxxxx” que são filtrados para a variável trib ( trib in siglasTrib$Sigla) dentro do loop [trib]

para cada iteração -
trib_DesmatMunic_Prodes<- DesmatMunic_Prodes %>% filter(siglaTribunal==trib)

o objeto trib_DesmatMunic_Prodes , é filtrada o valor da variável trib ( ou seja TJAC, DEPOIS TJAM… E ASSIM SUCESSIVAMENTE.

Uma vez filtrada -
DesmatMunic_ProdesUF ← read_municipality( code_muni = trib_DesmatMunic_Prodes$UF, year=2010 )

A trib_DesmatMunic_Prodes$UF a função read lê o campo UF e define o shape.

Deveria funcionar o loop e não sei se o erro está extamente aqui-

DesmatMunic_ProdesUF ← read_municipality( code_muni = trib_DesmatMunic_Prodes$UF, year=2010 )

Não sei se te expliqui corretamente …

5 - loop

for (trib in siglasTrib$Sigla) {

#Variavel do tribunal

tribunal<- df_amb %>% filter(siglaTribunal==trib)

1 - municipio com maior Área (km²) de desmatamento dentro do Estado pela metodologia Prodes/DETER

#1.1.1 - Tabela

Desmatamento = data.frame(ProdesDesmata)

Renomeando as colunas

Des_Munic ← rename(Desmatamento, Municipio = NM_MUN, Area = Area, UF = SIGLA_UF, siglaTribunal = Sigla)

trib_Des_Munic<- Des_Munic %>% filter(siglaTribunal==trib)

#1.1.2 - Mapas

Desmatamento_Prodes ← sqldf(“SELECT Sigla,NM_MUN,CD_MUN,SUM(AREA_KM) AS Area,SIGLA_UF FROM Prodes_Desmatamento
GROUP BY NM_MUN ORDER BY Area DESC LIMIT 1000”, row.names = TRUE)

dplyr::glimpse(Desmatamento_Prodes) #visualização

Novo trib_Desmatamento_Prodes

DesmatMunic_Prodes ← rename(Desmatamento_Prodes, Municipio = NM_MUN, Area = Area, UF = SIGLA_UF, siglaTribunal = Sigla)

trib_DesmatMunic_Prodes<- DesmatMunic_Prodes %>% filter(siglaTribunal==trib)

#Seleciona o shape de Estado e Municípios em função do tri_Florestas (for (trib in siglasTrib$Sigla))

#read_municipality( code_muni = “AC”, year=2010 ) - um exemplo.

DesmatMunic_ProdesUF ← read_municipality( code_muni = trib_DesmatMunic_Prodes$UF, year=2010 )

#join

trib_DesmatMunic_ProdesUF_SHAPE = left_join( DesmatMunic_ProdesUF, trib_DesmatMunic_Prodes, by = c(“code_muni” = “CD_MUN”))

12 - Multireport

filepath ← paste0(trib,format(Sys.time(),".%Y.%m.%d"),".docx")
print(filepath)
rmarkdown::render(input = “testemultireport.Rmd”,
output_format = “word_document”,
output_file = filepath, output_dir = “C:/R/reports2”)

}

1 Curtida

Acho que consegui entender. Tentei fazer uma simulação aqui. A primeira parte é apenas uma criação dos bancos de dados para tentar visualizar sua dúvida.

1ª parte
criei um banco de dados parecido com o siglasTrib:

siglasTrib <- data.frame(Sigla = c("TJAC","TJRR"))

criei um banco de dados parecido com o DesmatMunic_Prodes:

DesmatMunic_Prodes <- data.frame(siglaTribunal = rep(c("TJAC","TJRR"),2), UF = rep(c("AC","RR"),2))

2ª parte
tentei imitar seu loop:

trib <- NULL

for (trib in siglasTrib$Sigla) {

  trib_DesmatMunic_Prodes <- DesmatMunic_Prodes |> dplyr::filter(siglaTribunal==trib)

  DesmatMunic_ProdesUF <- geobr::read_municipality(code_muni = unique(trib_DesmatMunic_Prodes$UF), year=2010 )
}

Note que usei o unique(trib_DesmatMunic_Prodes$UF) na função read_municipality do geobr. Testei aqui e funcionou. Vou explicar:
Acho que ao usar o trib_DesmatMunic_Prodes$UF você estava passando um vetor com várias UFs sendo que o ideal era passar apenas uma. O unique faz isso.

Veja se eu simulei corretamente e tente ver se corrige seu problema. Espero que sim.