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