Directories and Files
From within R, we can interact with the file system. We can use this
to our advantage to quickly and repeatedly, set up a project
structure.
We’ll assume you want to use an RPoject, so set that up first using
RStudio in a new directory. Open that project, and proceed as
follows.
# name your directories
dirs <- c("docs", "scripts", "data", "output", "tmp")
# generate some base line metadata
yourName <- "Mathew Vis-Dunbar"
author <- paste0("Author: ", yourName, "\n")
createDate <- paste0("Created: ", format(Sys.Date()), "\n\n")
projectDescripion <- "Write some text here!"
# create the directories
sapply(dirs, function(x) dir.create(path = x, showWarnings = TRUE))
# create a route directory readme
writeLines(paste0(author, createDate, projectDescripion), "./readme.md")
# create content for readmes -- in order of `dirs`
readmes <- c(
'This folder contains all documentation for this project',
'This folder contains all scripts used in this project.',
'This folder contains all data used in this project.',
'This folder contains all (relevant) figures and other outputs created for this project.',
'This folder houses ephemeral materials for this project.')
# create the subdirectory readmes
for(i in 1:length(dirs)){
writeLines(paste0(author, createDate, readmes[i], "\n"), paste0(dirs[i], "/readme.md"))
}
LS0tCnRpdGxlOiAiRGlyZWN0b3JpZXMgYW5kIEZpbGVzIgpwYWdldGl0bGU6ICJEaXJlY3RvcmllcyBhbmQgRmlsZXMiCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgY29kZV9mb2xkaW5nOiBzaG93ICMgYWxsb3dzIHRvZ2dsaW5nIG9mIHNob3dpbmcgYW5kIGhpZGluZyBjb2RlLiBSZW1vdmUgaWYgbm90IHVzaW5nIGNvZGUuCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlICMgYWxsb3dzIHRoZSB1c2VyIHRvIGRvd25sb2FkIHRoZSBzb3VyY2UgLlJtZCBmaWxlLiBSZW1vdmUgaWYgbm90IHVzaW5nIGNvZGUuCiAgICBpbmNsdWRlczoKICAgICAgYWZ0ZXJfYm9keTogZm9vdGVyLmh0bWwgIyBpbmNsdWRlIGEgY3VzdG9tIGZvb3Rlci4KICAgIHRvYzogdHJ1ZQogICAgdG9jX2RlcHRoOiAzCiAgICB0b2NfZmxvYXQ6CiAgICAgIGNvbGxhcHNlZDogZmFsc2UKICAgICAgc21vb3RoX3Njcm9sbDogZmFsc2UKLS0tCgojIyBEaXJlY3RvcmllcyBhbmQgRmlsZXMgCgpGcm9tIHdpdGhpbiBSLCB3ZSBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUgZmlsZSBzeXN0ZW0uIFdlIGNhbiB1c2UgdGhpcyB0byBvdXIgYWR2YW50YWdlIHRvIHF1aWNrbHkgYW5kIHJlcGVhdGVkbHksIHNldCB1cCBhIHByb2plY3Qgc3RydWN0dXJlLgoKV2UnbGwgYXNzdW1lIHlvdSB3YW50IHRvIHVzZSBhbiBSUG9qZWN0LCBzbyBzZXQgdGhhdCB1cCBmaXJzdCB1c2luZyBSU3R1ZGlvIGluIGEgbmV3IGRpcmVjdG9yeS4gT3BlbiB0aGF0IHByb2plY3QsIGFuZCBwcm9jZWVkIGFzIGZvbGxvd3MuCgpgYGB7ciwgZXZhbCA9IEZBTFNFfQojIG5hbWUgeW91ciBkaXJlY3RvcmllcwpkaXJzIDwtIGMoImRvY3MiLCAic2NyaXB0cyIsICJkYXRhIiwgIm91dHB1dCIsICJ0bXAiKQoKIyBnZW5lcmF0ZSBzb21lIGJhc2UgbGluZSBtZXRhZGF0YQp5b3VyTmFtZSA8LSAiTWF0aGV3IFZpcy1EdW5iYXIiCmF1dGhvciA8LSBwYXN0ZTAoIkF1dGhvcjogIiwgeW91ck5hbWUsICJcbiIpCmNyZWF0ZURhdGUgPC0gcGFzdGUwKCJDcmVhdGVkOiAiLCBmb3JtYXQoU3lzLkRhdGUoKSksICJcblxuIikKcHJvamVjdERlc2NyaXBpb24gPC0gIldyaXRlIHNvbWUgdGV4dCBoZXJlISIKCiMgY3JlYXRlIHRoZSBkaXJlY3RvcmllcwpzYXBwbHkoZGlycywgZnVuY3Rpb24oeCkgZGlyLmNyZWF0ZShwYXRoID0geCwgc2hvd1dhcm5pbmdzID0gVFJVRSkpCgojIGNyZWF0ZSBhIHJvdXRlIGRpcmVjdG9yeSByZWFkbWUKd3JpdGVMaW5lcyhwYXN0ZTAoYXV0aG9yLCBjcmVhdGVEYXRlLCBwcm9qZWN0RGVzY3JpcGlvbiksICIuL3JlYWRtZS5tZCIpCgojIGNyZWF0ZSBjb250ZW50IGZvciByZWFkbWVzIC0tIGluIG9yZGVyIG9mIGBkaXJzYApyZWFkbWVzIDwtIGMoCiAgJ1RoaXMgZm9sZGVyIGNvbnRhaW5zIGFsbCBkb2N1bWVudGF0aW9uIGZvciB0aGlzIHByb2plY3QnLAogICdUaGlzIGZvbGRlciBjb250YWlucyBhbGwgc2NyaXB0cyB1c2VkIGluIHRoaXMgcHJvamVjdC4nLAogICdUaGlzIGZvbGRlciBjb250YWlucyBhbGwgZGF0YSB1c2VkIGluIHRoaXMgcHJvamVjdC4nLAogICdUaGlzIGZvbGRlciBjb250YWlucyBhbGwgKHJlbGV2YW50KSBmaWd1cmVzIGFuZCBvdGhlciBvdXRwdXRzIGNyZWF0ZWQgZm9yIHRoaXMgcHJvamVjdC4nLAogICdUaGlzIGZvbGRlciBob3VzZXMgZXBoZW1lcmFsIG1hdGVyaWFscyBmb3IgdGhpcyBwcm9qZWN0LicpCgojIGNyZWF0ZSB0aGUgc3ViZGlyZWN0b3J5IHJlYWRtZXMKZm9yKGkgaW4gMTpsZW5ndGgoZGlycykpewogIHdyaXRlTGluZXMocGFzdGUwKGF1dGhvciwgY3JlYXRlRGF0ZSwgcmVhZG1lc1tpXSwgIlxuIiksIHBhc3RlMChkaXJzW2ldLCAiL3JlYWRtZS5tZCIpKQp9CmBgYAoK