45  Dizin etkileşimleri

Bu sayfada, dizinler (klasörler) oluşturduğunuz, etkileşimde bulunduğunuz, kaydettiğiniz ve içe aktardığınız genel senaryoları ele alıyoruz.

45.1 Hazırlık

fs paketi

fs paketi, dizin etkileşimlerini kolaylaştıran ve bazı R tabanı fonksiyonlarını geliştiren bir tidyverse paketidir. Aşağıdaki bölümlerde genellikle fs’den gelen fonksiyonları kullanacağız.

pacman::p_load(
  fs,             # dosya/dizin etkileşimleri
  rio,            # içe aktar/dışa aktar
  here,           # göreceli dosya yolakları
  tidyverse)      # veri yönetimi ve görselleştirme

Dizini bir dendrogram ağacı olarak yazdır

fs’den dir_tree() fonksiyonunu kullanın.

Klasör dosya yolunu path = olarak sağlayın ve yalnızca bir seviyeyi mi (recurse = FALSE) yoksa tüm alt seviyelerdeki tüm dosyaları mı (recurse = TRUE) göstermek istediğinize karar verin. Aşağıda, R projesi için kısayol olarak here() kullanıyoruz ve bu R el kitabı için kullanılan tüm verileri içeren alt klasör “verilerini” belirledik. “veri” ve alt klasörlerindeki (örneğin “önbellek”, “salgın modelleri”, “nüfus”, “shp” ve “hava durumu”) içindeki tüm dosyaları gösterecek şekilde ayarladık.

fs::dir_tree(path = here("data"), recurse = TRUE)
C:/Users/ngulu864/AppData/Local/Temp/RtmpQXbGPz/file917c7b5c7032/epiRhandbook_eng/data
├── africa_countries.geo.json
├── cache
│   └── epidemic_models
│       ├── 2015-04-30
│       │   ├── estimated_reported_cases_samples.rds
│       │   ├── estimate_samples.rds
│       │   ├── latest_date.rds
│       │   ├── reported_cases.rds
│       │   ├── summarised_estimated_reported_cases.rds
│       │   ├── summarised_estimates.rds
│       │   └── summary.rds
│       ├── epinow_res.rds
│       ├── epinow_res_small.rds
│       ├── generation_time.rds
│       └── incubation_period.rds
├── case_linelists
│   ├── cleaning_dict.csv
│   ├── fluH7N9_China_2013.csv
│   ├── linelist_cleaned.rds
│   ├── linelist_cleaned.xlsx
│   └── linelist_raw.xlsx
├── country_demographics.csv
├── covid_example_data
│   ├── covid_example_data.xlsx
│   └── covid_shapefile
│       ├── FultonCountyZipCodes.cpg
│       ├── FultonCountyZipCodes.dbf
│       ├── FultonCountyZipCodes.prj
│       ├── FultonCountyZipCodes.sbn
│       ├── FultonCountyZipCodes.sbx
│       ├── FultonCountyZipCodes.shp
│       ├── FultonCountyZipCodes.shp.xml
│       └── FultonCountyZipCodes.shx
├── covid_incidence.csv
├── covid_incidence_map.R
├── district_count_data.xlsx
├── example
│   ├── Central Hospital.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
│   ├── Military Hospital.csv
│   ├── Missing.csv
│   ├── Other.csv
│   ├── Port Hospital.csv
│   └── St. Mark's Maternity Hospital (SMMH).csv
├── facility_count_data.rds
├── flexdashboard
│   ├── outbreak_dashboard.html
│   ├── outbreak_dashboard.Rmd
│   ├── outbreak_dashboard_shiny.Rmd
│   ├── outbreak_dashboard_test.html
│   └── outbreak_dashboard_test.Rmd
├── fluH7N9_China_2013.csv
├── gis
│   ├── africa_countries.geo.json
│   ├── covid_incidence.csv
│   ├── covid_incidence_map.R
│   ├── linelist_cleaned_with_adm3.rds
│   ├── population
│   │   ├── sle_admpop_adm3_2020.csv
│   │   └── sle_population_statistics_sierraleone_2020.xlsx
│   └── shp
│       ├── README.txt
│       ├── sle_adm3.CPG
│       ├── sle_adm3.dbf
│       ├── sle_adm3.prj
│       ├── sle_adm3.sbn
│       ├── sle_adm3.sbx
│       ├── sle_adm3.shp
│       ├── sle_adm3.shp.xml
│       ├── sle_adm3.shx
│       ├── sle_hf.CPG
│       ├── sle_hf.dbf
│       ├── sle_hf.prj
│       ├── sle_hf.sbn
│       ├── sle_hf.sbx
│       ├── sle_hf.shp
│       └── sle_hf.shx
├── godata
│   ├── cases_clean.rds
│   ├── contacts_clean.rds
│   ├── followups_clean.rds
│   └── relationships_clean.rds
├── likert_data.csv
├── linelist_cleaned.rds
├── linelist_cleaned.xlsx
├── linelist_raw.xlsx
├── make_evd_dataset-DESKTOP-JIEUMMI.R
├── make_evd_dataset.R
├── malaria_app
│   ├── app.R
│   ├── data
│   │   └── facility_count_data.rds
│   ├── funcs
│   │   └── plot_epicurve.R
│   ├── global.R
│   ├── malaria_app.Rproj
│   ├── server.R
│   └── ui.R
├── malaria_facility_count_data.rds
├── phylo
│   ├── sample_data_Shigella_tree.csv
│   ├── Shigella_subtree_2.nwk
│   ├── Shigella_subtree_2.txt
│   └── Shigella_tree.txt
├── rmarkdown
│   ├── outbreak_report.docx
│   ├── outbreak_report.html
│   ├── outbreak_report.pdf
│   ├── outbreak_report.pptx
│   ├── outbreak_report.Rmd
│   ├── report_tabbed_example.html
│   └── report_tabbed_example.Rmd
├── standardization
│   ├── country_demographics.csv
│   ├── country_demographics_2.csv
│   ├── deaths_countryA.csv
│   ├── deaths_countryB.csv
│   └── world_standard_population_by_sex.csv
├── surveys
│   ├── population.xlsx
│   ├── survey_data.xlsx
│   └── survey_dict.xlsx
└── time_series
    ├── campylobacter_germany.xlsx
    └── weather
        ├── germany_weather2002.nc
        ├── germany_weather2003.nc
        ├── germany_weather2004.nc
        ├── germany_weather2005.nc
        ├── germany_weather2006.nc
        ├── germany_weather2007.nc
        ├── germany_weather2008.nc
        ├── germany_weather2009.nc
        ├── germany_weather2010.nc
        └── germany_weather2011.nc

45.2 Bir dizindeki dosyaları listeleyin

Bir dizindeki yalnızca dosya adlarını listelemek için R tabanından dir() kullanabilirsiniz. Örneğin, bu komut, içindeki “data” klasörünün “population” alt klasöründeki dosyaların adlarını listeler. Göreli dosya yolu, ‘here()’ kullanılarak sağlanır (bunun hakkında daha fazla bilgiyi [İçe aktarma ve dışa aktarma] sayfasında okuyabilirsiniz).

# dosya adları
dir(here("data", "gis", "population"))
[1] "sle_admpop_adm3_2020.csv"                       
[2] "sle_population_statistics_sierraleone_2020.xlsx"

Dizin dosyalarının tam dosya yollarını listelemek için fs’den dir_ls() kullanabilirsiniz. Bir diğer R alternatifi “list.files()”dir.

# dosya yolları
dir_ls(here("data", "gis", "population"))
C:/Users/ngulu864/AppData/Local/Temp/RtmpQXbGPz/file917c7b5c7032/epiRhandbook_eng/data/gis/population/sle_admpop_adm3_2020.csv
C:/Users/ngulu864/AppData/Local/Temp/RtmpQXbGPz/file917c7b5c7032/epiRhandbook_eng/data/gis/population/sle_population_statistics_sierraleone_2020.xlsx

Bir dizindeki her dosyayla ilgili tüm meta veri bilgilerini almak için (ör. yol, değişiklik tarihi vb.), fs’den dir_info() kullanabilirsiniz.

Bu, örneğin dosyanın en son sürümünü içe aktarmak istediğinizde, dosyanın son değişiklik zamanını çıkarmak istiyorsanız özellikle yararlı olabilir. Bunun bir örneği için [İçe ve dışa aktar] sayfasına bakın.

# dosya bilgisi
dir_info(here("data", "gis", "population"))

İşte döndürülen veri çerçevesi. Tüm sütunları görmek için sağa kaydırın.

45.3 Dosya bilgisi

Belirli bir dosya hakkında meta veri bilgilerini çıkarmak için, fs’den file_info() (veya R tabanından file.info()) kullanabilirsiniz.

file_info(here("data", "case_linelists", "linelist_cleaned.rds"))

Burada sonucu dizine eklemek ve yalnızca “modification_time” değerini döndürmek için $ kullanıyoruz.

file_info(here("data", "case_linelists", "linelist_cleaned.rds"))$modification_time
[1] "2024-09-18 23:04:27 +07"

45.4 Var olup olmadığını kontrol edin

R nesneleri

Bir R nesnesinin * R içinde * olup olmadığını kontrol etmek için ‘exists()’ kullanabilirsiniz (nesne adını tırnak içinde sağlayın).

exists("linelist")
[1] FALSE

Bazı R tabanı paketlerinin, sahne arkasında “data” gibi genel nesne adları kullandığını ve “inherit= YANLIŞ” belirtilmediği sürece DOĞRU olarak görüneceğini unutmayın. Bu, veri kümenizi “data” olarak adlandırmamanın bir nedenidir.

exists("data")
[1] TRUE
exists("data", inherit = FALSE)
[1] FALSE

Bir fonksiyon yazıyorsanız, bir değişken olup olmadığını kontrol etmek için ‘exists()’ yerine ‘missing()’ kullanmalısınız.

Dizinler

Bir dizinin var olup olmadığını kontrol etmek için, fs’den is_dir() dizinine dosya yolunu (ve dosya adını) sağlayın. “TRUE” yazısının yazdırıldığını görmek için sağa kaydırın.

is_dir(here("data"))
C:/Users/ngulu864/AppData/Local/Temp/RtmpQXbGPz/file917c7b5c7032/epiRhandbook_eng/data 
                                                                                  TRUE 

Alternatif olarak file.exists() kullanılabilir.

Dosyalar

Belirli bir dosyanın var olup olmadığını kontrol etmek için fs’den is_file() kullanın. “TRUE” yazısının yazdırıldığını görmek için sağa kaydırın.

is_file(here("data", "case_linelists", "linelist_cleaned.rds"))
C:/Users/ngulu864/AppData/Local/Temp/RtmpQXbGPz/file917c7b5c7032/epiRhandbook_eng/data/case_linelists/linelist_cleaned.rds 
                                                                                                                      TRUE 

Alternatif olarak file.exists() kullanılabilir.

45.5 Oluşturmak

Dizinler

Yeni bir dizin (klasör) oluşturmak için fs’den dir_create() kullanabilirsiniz. Dizin zaten mevcutsa, üzerine yazılmaz ve hiçbir hata döndürülmez.

dir_create(here("data", "test"))

Bir alternatif, dizin zaten mevcutsa bir hata gösterecek olan dir.create()dir. Buna karşılık, bu senaryoda dir_create() sessiz olacaktır.

Dosyalar

fs’den file_create() ile (boş) bir dosya oluşturabilirsiniz. Dosya zaten mevcutsa, üzerine yazılmaz veya değiştirilmez.

file_create(here("data", "test.rds"))

Alternatifi file.create(). Ancak dosya zaten mevcutsa, bu seçenek dosyayı kesecektir. file_create() kullanırsanız, dosya değişmeden kalacaktır.

Yoksa oluştur

YAPIM AŞAMASINDA…

45.6 Silmek

R nesneleri

Bir R nesnesini kaldırmak için ‘rm()’ kullanın.

Dizinler

fs’den dir_delete() kullanın.

Dosyalar

Dosyaları fs içinden file_delete() ile silebilirsiniz.

45.7 Diğer dosyaları çalıştırma

source()

Bir R betiğini başka bir R betiğinden çalıştırmak için source() komutunu kullanabilirsiniz (R tabanından).

source(here("scripts", "cleaning_scripts", "clean_testing_data.R"))

Bu, yukarıdaki R komut dosyasını görüntülemeye ve komut dosyasının sağ üst köşesindeki “Kaynak” düğmesine tıklamaya eşdeğerdir. Bu, betiği çalıştıracak, ancak özellikle istenmedikçe sessizce yapacak (R konsoluna çıktı yok). Soru-cevap modunda R konsolu aracılığıyla bir kullanıcıyla etkileşim kurmak için “source()” kullanma örnekleri için [Etkileşimli konsol] sayfasındaki sayfaya bakabilirsiniz.

render()

“render()”, en sık R işaretleme komut dosyaları için kullanılan “source()”un bir varyasyonudur. R işaretleme dosyası olan input = ve ayrıca output_format = (tipik olarak “html_document”, “pdf_document”, “word_document”, ““) sağlamaktadır.

Daha fazla ayrıntı için [R Markdown ile Raporlar] hakkındaki sayfaya bakabilirsiniz. Ayrıca “render()” belgelerine buradan veya “?render” girerek bakabilirsiniz.

Dosyaları dizinde çalıştırın

Bir for loop oluşturabilir ve bunu ‘dir()’ ile tanımlanan bir dizindeki her dosyayı ‘source()’ için kullanabilirsiniz.

for(script in dir(here("scripts"), pattern = ".R$")) {   # R Project'in "scripts" klasöründeki her bir komut dosyası adı için (.R uzantılı)
  source(here("scripts", script))                        # dosyayı, komut dosyaları klasöründe bulunan eşleşen adla kaynaklayın
}

Yalnızca belirli komut dosyalarını çalıştırmak istiyorsanız, bunları şu şekilde adlarıyla tanımlayabilirsiniz:

scripts_to_run <- c(
     "epicurves.R",
     "demographic_tables.R",
     "survival_curves.R"
)

for(script in scripts_to_run) {
  source(here("scripts", script))
}

fs ve R tabanı fonksiyonlarının karşılaştırması

Dosyaları dizine aktarın

Tek tek dosyaları içe ve dışa aktarmak için [İçe ve dışa aktarma] hakkındaki sayfaya bakabilirsiniz.

Ayrıca dosya meta verilerine bakarak veya dosya adındaki bir tarihe dayalı olarak en son dosyayı otomatik olarak içe aktarma yöntemleri için [İçe ve dışa aktar] sayfasına bakabilirsiniz.

purrr paketinin aşağıdakileri gösterdiği bir örnek için [Yineleme, döngüler ve listeler] hakkındaki sayfaya bakabilirsiniz:

  • Bir veri çerçevesini bölme ve birden çok CSV dosyası olarak kaydetme
  • Bir veri çerçevesini bölme ve her bir parçayı tek bir Excel çalışma kitabında ayrı bir sayfa olarak kaydetme
  • Birden fazla CSV dosyasını içe aktarma ve bunları tek bir veri çerçevesinde birleştirme
  • Birden çok sayfa içeren bir Excel çalışma kitabını içe aktarma ve bunları tek bir veri çerçevesinde birleştirme

45.8 R tabanı

Belirtilen bir dizindeki dosyaları listelemekle aynı işlemi gerçekleştiren list.files() ve dir() fonksiyonlarına aşağıda bakın. “ignore.case =” veya aranacak belirli bir desen belirtebilirsiniz.

list.files(path = here("data"))

list.files(path = here("data"), pattern = ".csv")
# dir(path = here("data"), pattern = ".csv")

list.files(path = here("data"), pattern = "evd", ignore.case = TRUE)

Bir dosya şu anda “açık” ise, klasörünüzde “~$hospital_linelists.xlsx” gibi bir yaklaşık işareti olacak şekilde görüntülenir.

45.9 Kaynaklar

https://cran.r-project.org/web/packages/fs/vignettes/function-comparisons.html