[R-br] Como listar arquivos faltantes usando R

Elias Teixeira Krainski eliaskrainski em yahoo.com.br
Terça Março 19 19:38:33 BRT 2013


E a partir do vetor retornado pelo dir, 
substr() quebra string nas posicoes 
especificadas e o resultado e' tabulado.

## CMR:
a <- c("MCD12Q1.A2001.h10v08.hdf", "MCD12Q1.A2001.h10v09.hdf",
  "MCD12Q1.A2001.h10v10.hdf", "MCD12Q1.A2001.h10v11.hdf", 
  "MCD12Q1.A2001.h11v08.hdf", "MCD12Q1.A2001.h11v09.hdf")
table(substr(a, 10, 13))
table(substr(a, 16, 17))
table(substr(a, 10, 13), substr(a, 16, 17))


On Tue, 2013-03-19 at 19:16 -0300, Leandro Marino wrote:
> Thiago 
> 
> A função dir lista todos os arquivos de um diretório. Logo vc pode
> montar um vetor com os nomes de todos os arquivos e chegar com o
> dir(). O que estiver no primeiro e não estiver no segundo é o que você
> precisa baixar
> 
> Enviado de um dispositivo móvel.
> Sent from a mobile device. 
> 
> Em 19/03/2013 18:51, "Thiago V. dos Santos" <thi_veloso em yahoo.com.br>
> escreveu:
>         Elias,
>         
>         Obrigado pela dica, mas... Você poderia elaborá-la, por favor?
>         
>         Obrigado,
>         Thiago.
>         
>         
>         ----- Original Message -----
>         From: Elias Teixeira Krainski <eliaskrainski em yahoo.com.br>
>         To: r-br em listas.c3sl.ufpr.br
>         Cc:
>         Sent: Tuesday, March 19, 2013 4:07 PM
>         Subject: Re: [R-br] Como listar arquivos faltantes usando R
>         
>         Em problema similar ao seu eu faço uma tabela
>         em R com ano nas linhas e meses nas colunas
>         
>         Exemplo (no seu caso nao sei a posicao de mes):
>         a <- dir('diretorioDosArquivos')
>         table(substr(a, 10, 13)) ### anos
>         
>         
>         
>         On Tue, 2013-03-19 at 13:53 -0700, Thiago V. dos Santos wrote:
>         > Olá pessoal,
>         >
>         > Baixei centenas de imagens de satélite e agora devo conferir
>         se tenho todas que realmente vou precisar. A nomenclatura das
>         imagens segue o padrão:
>         >
>         > MCD12Q1.A2001.h10v08.hdf
>         > MCD12Q1.A2001.h10v09.hdf
>         >
>         > MCD12Q1.A2001.h10v10.hdf
>         >
>         > MCD12Q1.A2001.h10v11.hdf
>         >
>         >
>         > MCD12Q1.A2001.h11v08.hdf
>         >
>         > MCD12Q1.A2001.h11v09.hdf
>         >
>         > MCD12Q1.A2001.h11v10.hdf
>         >
>         > MCD12Q1.A2001.h11v11.hdf
>         >
>         > MCD12Q1.A2001.h11v12.hdf
>         >
>         > MCD12Q1.A2001.h11v13.hdf
>         >
>         > e assim por diante
>         >
>         > onde 2001 é o ano e vai de 2001 a 2011.
>         > h10 é um componente horizontal da imagem e vai de a 10 a 14.
>         > v08 é um componente vertical da imagem e vai de a 08 a 13.
>         >
>         > O que preciso fazer é o seguinte: varrer uma lista de todas
>         as imagens possíveis, que vão de 2001 a 2011, h10 a h14 e v08
>         a v13, e testar se tem alguma que está faltando. Para isso eu
>         uso a função "file.exists" dentro de três loops: "ano", "h" e
>         "v".
>         >
>         > No final da mensagem estou colando o código que usei para
>         fazer isso. Ele até funciona, mas não salva a lista inteira, e
>         sim somente o último nome. Estou fazendo alguma coisa errada
>         no loop. Acredito também que fazer três loops não é a maneira
>         mais otimizada de fazer isso, porém foi a primeira que veio na
>         minha cabeça.
>         >
>         > Alguém pode ajudar, criticando o código?
>         >
>         > Obrigado desde já,
>         > Thiago.
>         >
>         >
>         >
>         ##################################################################
>         > # Gather all files
>         > dir <- ('/Users/dossa013/data/MODIS/MCD12Q1/original')
>         > files <- list.files(dir, pattern='hdf', full.names=T)
>         >
>         > # Set beginning and ending years
>         > byear <- 2001
>         > eyear <- 2011
>         >
>         > # Set tiles
>         > h1 <- 10
>         > h2 <- 14
>         > v1 <- 08
>         > v2 <- 13
>         >
>         > # Loop over year and then over tiles
>         > for (x in byear:eyear) {
>         >   for (y in h1:h2)      {
>         >     for (z in v1:v2)     {
>         >       name <-
>         paste('/Users/dossa013/data/MODIS/MCD12Q1/original/MCD12Q1.A',x,'.h',y,'v',z,'.hdf', sep='')
>         >       if (file.exists(name)==F)
>         >
>         >       missing <- name
>         >
>         >   } # end of v
>         >  } # end of h
>         > } # end of year
>         > > missing
>         > [1]
>         "/Users/dossa013/data/MODIS/MCD12Q1/original/MCD12Q1.A2011.h14v9.hdf"
>         > _______________________________________________
>         > R-br mailing list
>         > R-br em 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.
>         
>         
>         _______________________________________________
>         R-br mailing list
>         R-br em 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.
>         
>         _______________________________________________
>         R-br mailing list
>         R-br em 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.
> _______________________________________________
> R-br mailing list
> R-br em 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.




Mais detalhes sobre a lista de discussão R-br