Loop varrendo quantidade enorme de arquivos

Boa noite pessoal, Preciso de ajuda para fazer um loop que percorra uma lista enorme de arquivos. Organizei uma série (+50GB) de imagens de satélite que está organizada em anos (2001 a 2011) e, por ano, a cada oito dias (julianos). lai200101.tif lai200109.tif lai200117.tif lai200125.tif . . . lai2011361.tif onde a nomenclatura segue o padrão: lai{ano}{diajuliano}.tif. Percebam que o incremento entre os dias é sempre oito. Preciso fazer duas operações nesse banco de dados: 1) um loop para abrir cada um dos arquivos, nomeando a variável com o ano e mês, e multiplicar a mesma por 0.001. Algo assim: library(raster) lai{ano}{diajuliano}<-raster('lai{ano}{diajuliano}.tif') #carregando imagem lai{ano}{diajuliano}<-lai{ano}{diajuliano}*0.001 #calibrando imagem 2) Ao longo de todos os arquivos, somar cada quatro para produzir um mês de dados, por exemplo: lai_jan_2001 <- lai200101.tif + lai200109.tif + lai200117.tif + lai200125.tif lai_feb_2001 <- lai200133.tif + lai200141.tif + lai200149.tif + lai200157.tif . . . lai_dec_2011 <- lai2011337.tif + lai2011345.tif + lai2011353.tif + lai2011361.tif Um verdadeiro desafio de programação, concordam? Alguém pode me dar uma ideia de como começar? Agradece desde já, Thiago.

Leia documentação para: assign(), gsub()... E, posso estar enganado, mas eu próprio já resolvi algo assim aqui em um post seu? b On Thursday, 3 May 2012, Thiago Veloso wrote:
Boa noite pessoal,
Preciso de ajuda para fazer um loop que percorra uma lista enorme de arquivos.
Organizei uma série (+50GB) de imagens de satélite que está organizada em anos (2001 a 2011) e, por ano, a cada oito dias (julianos).
lai200101.tif lai200109.tif lai200117.tif lai200125.tif . . . lai2011361.tif
onde a nomenclatura segue o padrão: lai{ano}{diajuliano}.tif. Percebam que o incremento entre os dias é sempre oito.
Preciso fazer duas operações nesse banco de dados:
1) um loop para abrir cada um dos arquivos, nomeando a variável com o ano e mês, e multiplicar a mesma por 0.001. Algo assim:
library(raster) lai{ano}{diajuliano}<-raster('lai{ano}{diajuliano}.tif') #carregando imagem lai{ano}{diajuliano}<-lai{ano}{diajuliano}*0.001 #calibrando imagem
2) Ao longo de todos os arquivos, somar cada quatro para produzir um mês de dados, por exemplo: lai_jan_2001 <- lai200101.tif + lai200109.tif + lai200117.tif + lai200125.tif lai_feb_2001 <- lai200133.tif + lai200141.tif + lai200149.tif + lai200157.tif . . . lai_dec_2011 <- lai2011337.tif + lai2011345.tif + lai2011353.tif + lai2011361.tif
Um verdadeiro desafio de programação, concordam? Alguém pode me dar uma ideia de como começar?
Agradece desde já, Thiago. _______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br <javascript:;> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

Obrigado pela sugestão, Benilton. Vou consultar a documentação sugerida. A outra dúvida que eu lancei na lista, alguns meses atrás, também envolvia grande quantidade de arquivos, mas sua filosofia era diferente. Saudações, Thiago. --- On Wed, 2/5/12, Benilton Carvalho <beniltoncarvalho@gmail.com> wrote: From: Benilton Carvalho <beniltoncarvalho@gmail.com> Subject: Re: [R-br] Loop varrendo quantidade enorme de arquivos To: "r-br@listas.c3sl.ufpr.br" <r-br@listas.c3sl.ufpr.br> Date: Wednesday, 2 May, 2012, 21:21 Leia documentação para: assign(), gsub()... E, posso estar enganado, mas eu próprio já resolvi algo assim aqui em um post seu? b On Thursday, 3 May 2012, Thiago Veloso wrote: Boa noite pessoal, Preciso de ajuda para fazer um loop que percorra uma lista enorme de arquivos. Organizei uma série (+50GB) de imagens de satélite que está organizada em anos (2001 a 2011) e, por ano, a cada oito dias (julianos). lai200101.tif lai200109.tif lai200117.tif lai200125.tif . . . lai2011361.tif onde a nomenclatura segue o padrão: lai{ano}{diajuliano}.tif. Percebam que o incremento entre os dias é sempre oito. Preciso fazer duas operações nesse banco de dados: 1) um loop para abrir cada um dos arquivos, nomeando a variável com o ano e mês, e multiplicar a mesma por 0.001. Algo assim: library(raster) lai{ano}{diajuliano}<-raster('lai{ano}{diajuliano}.tif') #carregando imagem lai{ano}{diajuliano}<-lai{ano}{diajuliano}*0.001 #calibrando imagem 2) Ao longo de todos os arquivos, somar cada quatro para produzir um mês de dados, por exemplo: lai_jan_2001 <- lai200101.tif + lai200109.tif + lai200117.tif + lai200125.tif lai_feb_2001 <- lai200133.tif + lai200141.tif + lai200149.tif + lai200157.tif . . . lai_dec_2011 <- lai2011337.tif + lai2011345.tif + lai2011353.tif + lai2011361.tif Um verdadeiro desafio de programação, concordam? Alguém pode me dar uma ideia de como começar? Agradece desde já, Thiago. _______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível. -----Inline Attachment Follows----- _______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

Cara quando eu executo vários arquivos faço o seguinte a<-dir("diretório dos seus arquivos") # aqui cria um vetor com as strings dos diretórios (nome dos arquivos no seu caso) tabela<-matrix(NA,2,2) resultados<-tabela s=0 e para dar nome para eles do jeito que vc está querendo e criar a variável vc pode pegar o nome while(s< length(a)){ s=1+s # conta +1 na leitura do arquivo nome_do_arquivo<-substr(a[s],0,nchar(a[s])-4) # retira o nome da variável do nome do arquivo (subtrai o .tif) arquivo<-raster('lai{ano}{diajuliano}.tif') #carrega seu tif multiplicado<-arquivo*0.001 # multiplica por 0.001 tabela[s,]<-assing(nome_do_arquivo,multiplicado) # atribui o resultado da multiplicação a vaiavel gerada e armazena em uma tabela na linha escolhida lá } s=0 f=0 while(f< length(a)){ s=s+1 f=4*s g=f-3 resultados[s,]<-tabela[c(g:f),] colnames(resultados)<-cut(seq(ISOdate(2001,1,1),to=ISOdate(2011,12,31),by="month"),"month") } deve funcionar qualquer coisa de uma olhada no que as funções fazem

Thiago, tente usar a funcao zApply do proprio pacote raster. ## datas de 8 em 8 dias, extraidas dos nomes dos arquivos tiff t8d <- seq(as.Date("2000-01-01"), length.out=100, by="8 days") ## stack dos arquivos tiff s <- stack(list.files(pattern="tiff$")) ## definindo variavel z como t8d s <- setZ(s, t8d, name="8day") require(zoo) res <- zApply(s, by=as.yearmon, fun=mean, name="meses") 2012/5/2 Thiago Veloso <thi_veloso@yahoo.com.br>
Boa noite pessoal,
Preciso de ajuda para fazer um loop que percorra uma lista enorme de arquivos.
Organizei uma série (+50GB) de imagens de satélite que está organizada em anos (2001 a 2011) e, por ano, a cada oito dias (julianos).
lai200101.tif lai200109.tif lai200117.tif lai200125.tif . . . lai2011361.tif
onde a nomenclatura segue o padrão: lai{ano}{diajuliano}.tif. Percebam que o incremento entre os dias é sempre oito.
Preciso fazer duas operações nesse banco de dados:
1) um loop para abrir cada um dos arquivos, nomeando a variável com o ano e mês, e multiplicar a mesma por 0.001. Algo assim:
library(raster) lai{ano}{diajuliano}<-raster('lai{ano}{diajuliano}.tif') #carregando imagem lai{ano}{diajuliano}<-lai{ano}{diajuliano}*0.001 #calibrando imagem
2) Ao longo de todos os arquivos, somar cada quatro para produzir um mês de dados, por exemplo: lai_jan_2001 <- lai200101.tif + lai200109.tif + lai200117.tif + lai200125.tif lai_feb_2001 <- lai200133.tif + lai200141.tif + lai200149.tif + lai200157.tif . . . lai_dec_2011 <- lai2011337.tif + lai2011345.tif + lai2011353.tif + lai2011361.tif
Um verdadeiro desafio de programação, concordam? Alguém pode me dar uma ideia de como começar?
Agradece desde já, Thiago. _______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
-- #------------------------------------------------------------------------------# # Jônatan Dupont Tatsch # # Climate and Biosphere Laboratory # # Department of Atmospheric Sciences # # Institute of Astronomy, Geophysics and Atmospheric Sciences # # University of São Paulo # # Rua do Matão, 1226 # # Cid. Universitária, São Paulo, SP, Brazil, CEP: 05508-090 # # Phone:+55 11 3091-4772, Fax:+55 11 3091-4714 # # http://jonatandupont.weebly.com/index.html # #------------------------------------------------------------------------------#

Jonatan e Tito Também agradeço as sugestões de vocês. Vou usá-las para construir uma função, o que parece ser mais eficiente em termos de otimização de uso de memória e consumo de disco. Saudações, Thiago. --- On Thu, 3/5/12, Jônatan <jdtatsch@gmail.com> wrote: From: Jônatan <jdtatsch@gmail.com> Subject: Re: [R-br] Loop varrendo quantidade enorme de arquivos To: r-br@listas.c3sl.ufpr.br Date: Thursday, 3 May, 2012, 2:24 Thiago, tente usar a funcao zApply do proprio pacote raster. ## datas de 8 em 8 dias, extraidas dos nomes dos arquivos tiff t8d <- seq(as.Date("2000-01-01"), length.out=100, by="8 days") ## stack dos arquivos tiff s <- stack(list.files(pattern="tiff$")) ## definindo variavel z como t8d s <- setZ(s, t8d, name="8day") require(zoo) res <- zApply(s, by=as.yearmon, fun=mean, name="meses") 2012/5/2 Thiago Veloso <thi_veloso@yahoo.com.br> Boa noite pessoal, Preciso de ajuda para fazer um loop que percorra uma lista enorme de arquivos. Organizei uma série (+50GB) de imagens de satélite que está organizada em anos (2001 a 2011) e, por ano, a cada oito dias (julianos). lai200101.tif lai200109.tif lai200117.tif lai200125.tif . . . lai2011361.tif onde a nomenclatura segue o padrão: lai{ano}{diajuliano}.tif. Percebam que o incremento entre os dias é sempre oito. Preciso fazer duas operações nesse banco de dados: 1) um loop para abrir cada um dos arquivos, nomeando a variável com o ano e mês, e multiplicar a mesma por 0.001. Algo assim: library(raster) lai{ano}{diajuliano}<-raster('lai{ano}{diajuliano}.tif') #carregando imagem lai{ano}{diajuliano}<-lai{ano}{diajuliano}*0.001 #calibrando imagem 2) Ao longo de todos os arquivos, somar cada quatro para produzir um mês de dados, por exemplo: lai_jan_2001 <- lai200101.tif + lai200109.tif + lai200117.tif + lai200125.tif lai_feb_2001 <- lai200133.tif + lai200141.tif + lai200149.tif + lai200157.tif . . . lai_dec_2011 <- lai2011337.tif + lai2011345.tif + lai2011353.tif + lai2011361.tif Um verdadeiro desafio de programação, concordam? Alguém pode me dar uma ideia de como começar? Agradece desde já, Thiago. _______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível. -- #------------------------------------------------------------------------------# # Jônatan Dupont Tatsch # # Climate and Biosphere Laboratory # # Department of Atmospheric Sciences # # Institute of Astronomy, Geophysics and Atmospheric Sciences # # University of São Paulo # # Rua do Matão, 1226 # # Cid. Universitária, São Paulo, SP, Brazil, CEP: 05508-090 # # Phone:+55 11 3091-4772, Fax:+55 11 3091-4714 # # http://jonatandupont.weebly.com/index.html # #------------------------------------------------------------------------------# -----Inline Attachment Follows----- _______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
participantes (4)
-
Benilton Carvalho
-
Jônatan
-
Thiago Veloso
-
Tito Conte