pacman::p_load(
fs, # Interações de arquivo / diretório
rio, # Importar / Exportar
here, # Caminhos de arquivo respectivos
tidyverse) # Gerenciamento e visualização de dados45 Interações de diretório
Nesta página, cobrimos cenários comuns onde você cria, interage, salva e importa com diretórios (pastas).
45.1 Preparação
Pacote fs
O fs é um pacote do tidyverse que facilita as interações de diretório, melhorando algumas das funções do R base. Nas seções a seguir, usaremos frequentemente as funções do fs.
Imprimir diretório como uma árvore de dendrograma
Use a função dir_tree() do fs.
Forneça o caminho da pasta do arquivo para path =. Use recurse = FALSE para mostrar apenas um nível, ou recurse = TRUE para mostrar todos os arquivos em todos os subníveis. Abaixo, usamos here() como uma abreviação para o projeto R e especificamos sua subpasta “data” (dados), que contém os dados de exemplo deste manual. Nós o configuramos para exibir todos os arquivos na pasta supra citada e suas subpastas.
fs::dir_tree(path = here("data"), recurse = TRUE)data
├── case_linelists
│ └── linelist_cleaned.rds
├── example
│ ├── Central Hospital.csv
│ ├── Military Hospital.csv
│ ├── Missing.csv
│ ├── Other.csv
│ ├── Port Hospital.csv
│ ├── St. Mark's Maternity Hospital (SMMH).csv
│ ├── district_weekly_count_data.xlsx
│ ├── fluH7N9_China_2013.csv
│ ├── hospital_linelists.xlsx
│ └── linelists
│ ├── 20201007linelist.csv
│ ├── case_linelist20201006.csv
│ ├── case_linelist_2020-10-02.csv
│ ├── case_linelist_2020-10-03.csv
│ ├── case_linelist_2020-10-04.csv
│ ├── case_linelist_2020-10-05.csv
│ └── case_linelist_2020-10-08.xlsx
├── flexdashboard
│ ├── outbreak_dashboard.Rmd
│ ├── outbreak_dashboard.html
│ └── outbreak_dashboard_test.html
└── malaria_app
├── app.R
├── data
│ └── facility_count_data.rds
├── funcs
│ └── plot_epicurve.R
├── global.R
├── malaria_app.Rproj
├── server.R
└── ui.R
45.2 Listar arquivos em um diretório
Para listar apenas os nomes dos arquivos em um diretório, você pode usar dir() do R base. Por exemplo, este comando lista os nomes dos arquivos na subpasta “linelists” da pasta “example” em um projeto R. O caminho de arquivo respectivo é fornecido usando here() (sobre o qual você pode ler mais na página Importar e exportar).
# Nomes de arquivos
dir(here("data", "example", "linelists"))[1] "20201007linelist.csv" "case_linelist_2020-10-02.csv"
[3] "case_linelist_2020-10-03.csv" "case_linelist_2020-10-04.csv"
[5] "case_linelist_2020-10-05.csv" "case_linelist_2020-10-08.xlsx"
[7] "case_linelist20201006.csv"
Para listar os caminhos completos dos arquivos do diretório, você pode usar dir_ls() de fs. Uma alternativa é list.files() do R base .
# Caminhos de arquivos
dir_ls(here("data", "example", "linelists"))data/example/linelists/20201007linelist.csv
data/example/linelists/case_linelist20201006.csv
data/example/linelists/case_linelist_2020-10-02.csv
data/example/linelists/case_linelist_2020-10-03.csv
data/example/linelists/case_linelist_2020-10-04.csv
data/example/linelists/case_linelist_2020-10-05.csv
data/example/linelists/case_linelist_2020-10-08.xlsx
Para obter todas as informações de metadados sobre cada arquivo em um diretório (por exemplo, caminho, data de modificação, etc.), você pode usar dir_info() de fs.
Isso pode ser particularmente útil se você deseja extrair a hora da última modificação do arquivo, por exemplo, se deseja importar a versão mais recente. Para obter um exemplo disso, consulte a página Importar e exportar.
# Informações do arquivo
dir_info(here("data", "example", "linelists"))Aqui está o dataframe que retorna. Role para a direita para ver todas as colunas.
45.3 Informações do arquivo
Para extrair informações de metadados sobre um arquivo específico, você pode usar file_info() de fs (ou file.info() do R base).
file_info(here("data", "case_linelists", "linelist_cleaned.rds"))Aqui usamos o $ para indexar o resultado e retornar apenas o valor modification_time.
file_info(here("data", "case_linelists", "linelist_cleaned.rds"))$modification_time[1] "2026-10-06 07:27:10 UTC"
45.4 Verifique se existe
Objetos R
Você pode usar exists() do R base para verificar se um objeto existe dentro do R (forneça o nome do objeto entre aspas).
exists("linelist")[1] FALSE
Observe que alguns pacotes do R base usam nomes de objetos genéricos como “data” (que significa “dados” em inglês) nos bastidores, que aparecerão como TRUE a menos que inherit = FALSE seja especificado. Este é um dos motivos para não nomear o conjunto de dados como “data”.
exists("data")[1] TRUE
exists("data", inherit = FALSE)[1] FALSE
Se você está escrevendo uma função, deve usar missing() do R base para verificar se um argumento está presente ou não, ao invés de exists().
Diretórios
Para verificar se existe um diretório, forneça o caminho do arquivo (e nome do arquivo) para is_dir() de fs. Role para a direita para ver que retorna TRUE.
is_dir(here("data"))data
TRUE
Uma alternativa é file.exists() do R base.
Arquivos
Para verificar se um arquivo específico existe, use is_file() de fs. Role para a direita para ver que retorna TRUE.
is_file(here("data", "case_linelists", "linelist_cleaned.rds"))data/case_linelists/linelist_cleaned.rds
TRUE
Uma alternativa no R base é file.exists().
45.5 Criar
Diretórios
Para criar um novo diretório (pasta), você pode usar dir_create() de fs. Se o diretório já existir, ele não será criado novamente e não será retornado nenhum erro.
dir_create(here("data", "test"))Uma alternativa é dir.create() do R base, que mostrará um erro se o diretório já existir. Em contraste, dir_create() neste cenário será silencioso.
Arquivos
Você pode criar um arquivo (vazio) com file_create() de fs. Se o arquivo já existir, ele não será criado novamente ou alterado.
file_create(here("data", "test.rds"))file.create() é uma alternativa no R base. Mas se o arquivo já existe, esta opção irá truncá-lo. Se você usar file_create() o arquivo não será alterado.
Criar se não existir
EM CONSTRUÇÃO
45.6 Deletar
Objetos R
Use rm() do R base para remover um objeto R.
Diretórios
Use dir_delete() de fs.
Arquivos
Você pode excluir arquivos com file_delete() de fs.
45.7 Executando outros arquivos
source()
Para executar um script R a partir de outro script R, você pode usar o comando source() (do R base).
source(here("scripts", "cleaning_scripts", "clean_testing_data.R"))Isso é equivalente a visualizar o script R acima e clicar no botão “Source” (Fonte) no canto superior direito do script. Isso executará o script, mas silenciosamente (sem saída para o console do R), a menos que seja especificada esta intenção. Veja a página [Console interativo] para exemplos de uso da source() para interagir com um usuário através do console R no modo pergunta e resposta.
render()
render() é uma variação de source() mais frequentemente usada para scripts R markdown. Você fornece o input = que é o arquivo Rmarkdown (.Rmd), e também o output_format = (normalmente “html_document”, “pdf_document”, “word_document”, ““)
Consulte a página Relatórios com R Markdown para obter mais detalhes. Veja também a documentação para render() aqui ou inserindo ?render.
Executar arquivos em um diretório
Você pode criar um for loop e usá-lo em source() para todos os arquivos em um diretório, identificado com dir(). with dir().
for(script in dir(here("scripts"), pattern = ".R$")) { # Para cada nome de script na pasta "scripts" do Projeto R (com extensão .R)
source(here("scripts", script)) # Fonte dos arquivos com nomes correspondentes aos encontrados na pasta de scripts
}Se você deseja apenas executar determinados scripts, pode identificá-los pelos nomes da seguinte forma:
scripts_to_run <- c(
"epicurves.R",
"demographic_tables.R",
"survival_curves.R"
)
for(script in scripts_to_run) {
source(here("scripts", script))
}Aqui está uma comparação das funções de fs e R base.
Importar arquivos em um diretório
Consulte a página Importar e exportar para importar e exportar arquivos individuais.
Consulte também a página Importar e exportar para métodos que importem automaticamente o arquivo mais recente, com base em uma data no nome do arquivo ou nos metadados do arquivo.
Veja na página Iteração, loops e listas um exemplo com o pacote purrr demonstrando:
- Dividir um dataframe e salvá-lo como vários arquivos CSV
- Dividir um dataframe e salvar cada parte em uma planilha separada dentro de uma pasta de trabalho do Excel
- Importar vários arquivos CSV e combiná-los em um dataframe
- Importar uma pasta de trabalho do Excel com várias planilhas e combiná-las em um único dataframe
45.8 R base
Veja abaixo as funções list.files() e dir(), que realizam a mesma operação de listar arquivos dentro de um diretório especificado. Você pode especificar ignore.case = ou um padrão específico para procurar.
list.files(path = here("data"))
list.files(path = here("data", "example"), pattern = "\\.csv$")
# dir(path = here("data", "example"), pattern = "\\.csv$")
list.files(path = here("data", "example"), pattern = "hospital", ignore.case = TRUE)Se um arquivo estiver “aberto” no momento, ele será exibido em sua pasta com um til na frente, como “~$hospital_linelists.xlsx”.
45.9 Recursos
https://cran.r-project.org/web/packages/fs/vignettes/function-comparisons.html

