::p_load(
pacman# dosya/dizin etkileşimleri
fs, # içe aktar/dışa aktar
rio, # göreceli dosya yolakları
here, # veri yönetimi ve görselleştirme tidyverse)
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.
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.
::dir_tree(path = here("data"), recurse = TRUE) fs
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:
<- c(
scripts_to_run "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