Eu sou muito novo no R e estou trabalhando na atualização de um script R para iterar através de uma série de tabelas .dbf criadas usando o ArcGIS e produzir uma série de gráficos.
Eu tenho um diretório, C: \ Scratch, que conterá todos os meus arquivos .dbf. No entanto, quando o ArcGIS cria essas tabelas, ele também inclui um arquivo .dbf.xml. Quero remover esses arquivos .dbf.xml da minha lista de arquivos e, portanto, da iteração. Eu tentei pesquisar e experimentar expressões regulares sem sucesso. Esta é a expressão básica que estou usando (excluindo todas as várias experiências):
files <- list.files(pattern = "dbf")
Alguém pode me dar alguma direção?
glob2rx()
geralmente é útil.Respostas:
$
no final significa que este é o fim da string."dbf$"
também funcionará, mas adicionar\\.
(.
é um caractere especial em expressões regulares, portanto você precisa evitá-lo) assegura que você corresponda apenas arquivos com extensão.dbf
(caso você tenha, por exemplo,.adbf
arquivos).fonte
ignore.case
argumento da função, entãolist.files(pattern = "\\.dbf$", ignore.case=TRUE)
. E veja a página de ajuda dessa função (?list.files
) para mais detalhes.Tente isso, que usa globs em vez de expressões regulares, para selecionar apenas os nomes de arquivos que terminam em
.dbf
fonte
Pegue o padrão para encontrar
"\\.dbf"
no final da string usando o$
caractere:fonte
\` escape the
.` agora. Então, alguém se pergunta por que isso foi prejudicado?Como não sou muito bom em usar expressões regulares sofisticadas, execute essa tarefa da seguinte maneira:
Primeira linha apenas lista todos os arquivos do diretório de trabalho. O segundo elimina tudo o que contém ".xml" (grep retorna índices de tais strings no vetor 'files'; o subconjunto com índices negativos remove as entradas correspondentes do vetor). O argumento "corrigido" para a função grep é apenas o meu capricho, pois geralmente quero realizar a correspondência de padrões brutos sem regexprs extravagantes no estilo Perl, o que pode causar surpresa para mim.
Estou ciente de que essa solução simplesmente reflete desvantagens na minha educação, mas para um iniciante, pode ser útil =) pelo menos é fácil.
fonte
-
sinal antesgrep
. Eu precisava desse tipo de solução para extrair arquivos específicos de um arquivo zip. Primeiro, obtenha a lista de arquivos em um data.frame e obtenha arquivos específicos e extraia-os mais tarde.lf <- unzip(file, list=T)[,1]; files.shp <- lf[grep(".shp", lf, fixed=T)]
Fornece a lista de arquivos com o caminho completo:
fonte