[R-br] Como listar arquivos faltantes usando R

Thiago V. dos Santos thi_veloso em yahoo.com.br
Terça Março 19 17:53:35 BRT 2013


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"


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