Associated Material
Module: Module 09 - Workflows
Getting organised
- Create a structure
- Create a README
- Choose a license
The usethis
package can help you, and provides many
helper function for creating and setting up projects and packages
# Create and open a new package
usethis::create_project(path = "path/to/new/project")
# Create a markdown README
usethis::use_readme_md()
# Create an RMarkdown README
usethis::use_readme_rmd()
# Create a new R script in your project in directory R/
usethis::use_r(name = "myfile.R")
Configuration
It’s worth taking some time to configure options in your environment
to make life easier for yourself.
The .Rprofile
file is used to store these
configurations. You can open it with
usethis::edit_r_profile()
.
- Don’t load ‘analysis’ dependant packages in your Rprofile
Learn some of the keyboard shortcuts in RStudio to improve your
productivity. Alt + Shift + K is the
keyboard shortcut to show you the keyboard shortcuts.
Version control
Using an automated version control system such as git
is
highly recommended. It can help you manage different versions of your
code and show differences or let you jump between versions.
Debugging
General process:
- Do I recognise the message?
- Re-look at the command I ran looking for
- typos
- missing syntax (e.g. brackets, semicolons, etc.)
- correct naming of things
- Is the input for my command what I expect it is?
- Did the previous command run properly?
- if not jump to 1. for the previous command
Testing
Test your code as you go. It can be useful to adopt an automated
testing solution - such as the testthat
package to create
tests that can be automatically run.
LS0tCnRpdGxlOiAiWm9vbSBOb3RlcyAwOTogV29ya2Zsb3dzIgpkYXRlOiAiU2VtZXN0ZXIgMiwgMjAyMiIKb3V0cHV0OgogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgdG9jX2RlcHRoOiAzCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlCiAgICBjb2RlX2ZvbGRpbmc6IHNob3cKLS0tCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0KbGlicmFyeShrbml0cikKCmtuaXRyOjpvcHRzX2NodW5rJHNldCgKICBjb21tZW50ID0gIiM+IiwKICBmaWcucGF0aCA9ICJmaWd1cmVzLzA5LyIsICMgdXNlIG9ubHkgZm9yIHNpbmdsZSBSbWQgZmlsZXMKICBjb2xsYXBzZSA9IFRSVUUsCiAgZWNobyA9IFRSVUUKKQpgYGAKCj4gIyMjIyBBc3NvY2lhdGVkIE1hdGVyaWFsCj4KPiBNb2R1bGU6IFtNb2R1bGUgMDkgLSBXb3JrZmxvd3NdKDA5LXdvcmtmbG93cy5odG1sKQoKIyMgR2V0dGluZyBvcmdhbmlzZWQKCi0gQ3JlYXRlIGEgc3RydWN0dXJlCi0gQ3JlYXRlIGEgUkVBRE1FCi0gQ2hvb3NlIGEgbGljZW5zZQoKVGhlIGB1c2V0aGlzYCBwYWNrYWdlIGNhbiBoZWxwIHlvdSwgYW5kIHByb3ZpZGVzIG1hbnkgaGVscGVyIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhbmQgc2V0dGluZyB1cCBwcm9qZWN0cyBhbmQgcGFja2FnZXMKCmBgYHtyLCBldmFsID0gRkFMU0V9CiMgQ3JlYXRlIGFuZCBvcGVuIGEgbmV3IHBhY2thZ2UKdXNldGhpczo6Y3JlYXRlX3Byb2plY3QocGF0aCA9ICJwYXRoL3RvL25ldy9wcm9qZWN0IikKCiMgQ3JlYXRlIGEgbWFya2Rvd24gUkVBRE1FCnVzZXRoaXM6OnVzZV9yZWFkbWVfbWQoKQoKIyBDcmVhdGUgYW4gUk1hcmtkb3duIFJFQURNRQp1c2V0aGlzOjp1c2VfcmVhZG1lX3JtZCgpCgojIENyZWF0ZSBhIG5ldyBSIHNjcmlwdCBpbiB5b3VyIHByb2plY3QgaW4gZGlyZWN0b3J5IFIvCnVzZXRoaXM6OnVzZV9yKG5hbWUgPSAibXlmaWxlLlIiKQoKYGBgCgojIyMgQ29uZmlndXJhdGlvbgoKSXQncyB3b3J0aCB0YWtpbmcgc29tZSB0aW1lIHRvIGNvbmZpZ3VyZSBvcHRpb25zIGluIHlvdXIgZW52aXJvbm1lbnQgdG8gbWFrZSBsaWZlIGVhc2llciBmb3IgeW91cnNlbGYuCgpUaGUgYC5ScHJvZmlsZWAgZmlsZSBpcyB1c2VkIHRvIHN0b3JlIHRoZXNlIGNvbmZpZ3VyYXRpb25zLiBZb3UgY2FuIG9wZW4gaXQgd2l0aCBgdXNldGhpczo6ZWRpdF9yX3Byb2ZpbGUoKWAuCgotIERvbid0IGxvYWQgJ2FuYWx5c2lzJyBkZXBlbmRhbnQgcGFja2FnZXMgaW4geW91ciBScHJvZmlsZQoKTGVhcm4gc29tZSBvZiB0aGUga2V5Ym9hcmQgc2hvcnRjdXRzIGluIFJTdHVkaW8gdG8gaW1wcm92ZSB5b3VyIHByb2R1Y3Rpdml0eS4gPGtiZD5BbHQ8L2tiZD4gKyA8a2JkPlNoaWZ0PC9rYmQ+ICsgPGtiZD5LPC9rYmQ+IGlzIHRoZSBrZXlib2FyZCBzaG9ydGN1dCB0byBzaG93IHlvdSB0aGUga2V5Ym9hcmQgc2hvcnRjdXRzLgoKIyMjIFZlcnNpb24gY29udHJvbAoKVXNpbmcgYW4gYXV0b21hdGVkIHZlcnNpb24gY29udHJvbCBzeXN0ZW0gc3VjaCBhcyBgZ2l0YCBpcyBoaWdobHkgcmVjb21tZW5kZWQuIEl0IGNhbiBoZWxwIHlvdSBtYW5hZ2UgZGlmZmVyZW50IHZlcnNpb25zIG9mIHlvdXIgY29kZSBhbmQgc2hvdyBkaWZmZXJlbmNlcyBvciBsZXQgeW91IGp1bXAgYmV0d2VlbiB2ZXJzaW9ucy4KCiMjIERlYnVnZ2luZwoKR2VuZXJhbCBwcm9jZXNzOgoKMS4gRG8gSSByZWNvZ25pc2UgdGhlIG1lc3NhZ2U/CjIuIFJlLWxvb2sgYXQgdGhlIGNvbW1hbmQgSSByYW4gbG9va2luZyBmb3IKICAgIC0gdHlwb3MKICAgIC0gbWlzc2luZyBzeW50YXggKGUuZy4gYnJhY2tldHMsIHNlbWljb2xvbnMsIGV0Yy4pCiAgICAtIGNvcnJlY3QgbmFtaW5nIG9mIHRoaW5ncwozLiBJcyB0aGUgaW5wdXQgZm9yIG15IGNvbW1hbmQgd2hhdCBJIGV4cGVjdCBpdCBpcz8KNC4gRGlkIHRoZSBwcmV2aW91cyBjb21tYW5kIHJ1biBwcm9wZXJseT8KICAgIC0gaWYgbm90IGp1bXAgdG8gMS4gZm9yIHRoZSBwcmV2aW91cyBjb21tYW5kCgoKIyMgVGVzdGluZwoKVGVzdCB5b3VyIGNvZGUgYXMgeW91IGdvLiBJdCBjYW4gYmUgdXNlZnVsIHRvIGFkb3B0IGFuIGF1dG9tYXRlZCB0ZXN0aW5nIHNvbHV0aW9uIC0gc3VjaCBhcyB0aGUgYHRlc3R0aGF0YCBwYWNrYWdlIHRvIGNyZWF0ZSB0ZXN0cyB0aGF0IGNhbiBiZSBhdXRvbWF0aWNhbGx5IHJ1bi4K