This document presents usual steps to convert a R file to a Rmd file.

1 - Open RStudio

2 - Open your R file (with .R extension)

It may contain : - call to libraries - comments - code to load data - code to modify data - code to make figure (run all the lines to see)

3 - Open a Rmd file

using File > New File > Rmarkdown

Two options :

A Rmarkdown file is structured with :

Note : To insert chunk, use Code > Insert chunk, or the shortcut (CTRL + ALT + I)

There are many options to customize chunks. A guide can be found at https://bookdown.org/yihui/rmarkdown/.

4 - First rendering

4.1 - Copy paste all the R file content into a Rmd chunk

4.2 - Knit it !

to see a first rendering, by pressing the Knit button

Notes :

  • It creates a new file with html extension, with the same file name as the Rmd
  • Warning : If output file already exists, it will be overwritten

Observations :

  • Good traceability
  • All figures are there
  • One single output file : easily shareable

5 - Second rendering

5.1 - Split chunks and comments

5.2 - Run each chunk

We can :

  • appropriate the code by adding comments
  • explain figures

5.3 - Knit it !

6 - Third rendering

6.1 - Add formatting

Comments are formatted in markdown (R-markdown !) :

  • add titles using # (first level), ## (second level) … up to 6 !
  • make italic text : *italic text* or _italic text_
  • make bold text by wrapping it within two asterisks : **bold text**
  • and more : https://www.markdownguide.org/cheat-sheet/

6.2 - Knit it !

7 - Fourth rendering

7.1 - Programming good pratice

In order of appearance :

  • meaningful title
  • current date : knitting date, to remember when the analysis was done
  • explain goal of the document
  • add .libPaths() to track the location of libraries
  • load environment : libraries, global variables (eg. paths)… Group everything at the beginning of the script to see what will be needed !
  • load data
  • track libraries of origin for each function using package::function syntax instead of function, because some packages name their functions the same (eg. filter function)
  • summarize the environment with sessionInfo() as the last line, in the last chunk

7.2 - Knit it !

Waouh !

8 - In practice

In practice, we start with a pre-filled Rmarkdown document, and add headers, codes, comments and formatting while progressing in the analysis. Programming best pratices should be applied while working, and not in the end…

LS0tCnRpdGxlOiAiUiB0byBSbWQiCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgY29kZV9kb3dubG9hZDogdHJ1ZQogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlCi0tLQoKCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgaDEgeyBmb250LXNpemU6IDE4cHggfQogIGgyIHsgZm9udC1zaXplOiAxNXB4IH0KPC9zdHlsZT4KCgpUaGlzIGRvY3VtZW50IHByZXNlbnRzIHVzdWFsIHN0ZXBzIHRvIGNvbnZlcnQgYSBSIGZpbGUgdG8gYSBSbWQgZmlsZS4KCgojIC0gT3BlbiBSU3R1ZGlvCgoKIyAtIE9wZW4geW91ciBSIGZpbGUgKHdpdGggLlIgZXh0ZW5zaW9uKQoKSXQgbWF5IGNvbnRhaW4gOgotIGNhbGwgdG8gbGlicmFyaWVzCi0gY29tbWVudHMKLSBjb2RlIHRvIGxvYWQgZGF0YQotIGNvZGUgdG8gbW9kaWZ5IGRhdGEKLSBjb2RlIHRvIG1ha2UgZmlndXJlCihydW4gYWxsIHRoZSBsaW5lcyB0byBzZWUpCgojIC0gT3BlbiBhIFJtZCBmaWxlCnVzaW5nIEZpbGUgPiBOZXcgRmlsZSA+IFJtYXJrZG93bgoKVHdvIG9wdGlvbnMgOgoKLSBDcmVhdGUgZW1wdHkgZG9jdW1lbnQgdG8gc3RhcnQgZnJvbSBzY3JhdGNoCi0gTmFtZSBhbmQgc2F2ZSB0aGUgZG9jdW1lbnQgdG8gc3RhcnQgZnJvbSBhIHByZS1maWxsZWQgUm1hcmtkb3duICh1c2VmdWwgISkKCkEgUm1hcmtkb3duIGZpbGUgaXMgc3RydWN0dXJlZCB3aXRoIDoKCi0gaGVhZGVyIDogbWFueSBvcHRpb25zIGFyZSBwb3NzaWJsZSB0byBjdXN0b21pemUgc3R5bGUKLSBjaHVua3MgdG8gd3JpdGUgd2l0aCAqKnByb2dyYW1taW5nIGxhbmd1YWdlKioKLSBlbXB0eSBzcGFjZSBiZXR3ZWVuIGNodW5rcyB0byB3cml0ZSBpbiAqKm5hdHVyYWwgbGFuZ3VhZ2UqKgoKTm90ZSA6IFRvIGluc2VydCBjaHVuaywgdXNlIENvZGUgPiBJbnNlcnQgY2h1bmssIG9yIHRoZSBzaG9ydGN1dCAoQ1RSTCArIEFMVCArIEkpCgpUaGVyZSBhcmUgbWFueSBvcHRpb25zIHRvIGN1c3RvbWl6ZSBjaHVua3MuIEEgZ3VpZGUgY2FuIGJlIGZvdW5kIGF0IFtodHRwczovL2Jvb2tkb3duLm9yZy95aWh1aS9ybWFya2Rvd24vXShodHRwczovL2Jvb2tkb3duLm9yZy95aWh1aS9ybWFya2Rvd24vKS4KCgojIC0gRmlyc3QgcmVuZGVyaW5nCgojIyAtIENvcHkgcGFzdGUgYWxsIHRoZSBSIGZpbGUgY29udGVudCBpbnRvIGEgUm1kIGNodW5rCgojIyAtIEtuaXQgaXQgIQp0byBzZWUgYSBmaXJzdCByZW5kZXJpbmcsIGJ5IHByZXNzaW5nIHRoZSAqKktuaXQgYnV0dG9uKioKCk5vdGVzIDoKCi0gSXQgY3JlYXRlcyBhIG5ldyBmaWxlIHdpdGggaHRtbCBleHRlbnNpb24sIHdpdGggdGhlIHNhbWUgZmlsZSBuYW1lIGFzIHRoZSBSbWQKLSBXYXJuaW5nIDogSWYgb3V0cHV0IGZpbGUgYWxyZWFkeSBleGlzdHMsIGl0IHdpbGwgYmUgKipvdmVyd3JpdHRlbioqCgpPYnNlcnZhdGlvbnMgOgoKLSBHb29kIHRyYWNlYWJpbGl0eQotIEFsbCBmaWd1cmVzIGFyZSB0aGVyZQotIE9uZSBzaW5nbGUgb3V0cHV0IGZpbGUgOiBlYXNpbHkgc2hhcmVhYmxlCgoKIyAtIFNlY29uZCByZW5kZXJpbmcKCiMjIC0gU3BsaXQgY2h1bmtzIGFuZCBjb21tZW50cwoKIyMgLSBSdW4gZWFjaCBjaHVuawoKV2UgY2FuIDoKCi0gYXBwcm9wcmlhdGUgdGhlIGNvZGUgYnkgYWRkaW5nIGNvbW1lbnRzCi0gZXhwbGFpbiBmaWd1cmVzCgojIyAtIEtuaXQgaXQgIQoKCiMgLSBUaGlyZCByZW5kZXJpbmcKCiMjIC0gQWRkIGZvcm1hdHRpbmcKCkNvbW1lbnRzIGFyZSBmb3JtYXR0ZWQgaW4gKiptYXJrZG93bioqIChSLW1hcmtkb3duICEpIDoKCi0gYWRkIHRpdGxlcyB1c2luZyBcIyAoZmlyc3QgbGV2ZWwpLCBcI1wjIChzZWNvbmQgbGV2ZWwpIC4uLiB1cCB0byA2ICEKLSBtYWtlIGl0YWxpYyB0ZXh0IDogXCoqaXRhbGljIHRleHQqXCogb3IgXF9faXRhbGljIHRleHRfXF8KLSBtYWtlIGJvbGQgdGV4dCBieSB3cmFwcGluZyBpdCB3aXRoaW4gdHdvIGFzdGVyaXNrcyA6IFwqXCoqKmJvbGQgdGV4dCoqXCpcKgotIGFuZCBtb3JlIDogW2h0dHBzOi8vd3d3Lm1hcmtkb3duZ3VpZGUub3JnL2NoZWF0LXNoZWV0L10oaHR0cHM6Ly93d3cubWFya2Rvd25ndWlkZS5vcmcvY2hlYXQtc2hlZXQvKQoKIyMgLSBLbml0IGl0ICEKCgojIC0gRm91cnRoIHJlbmRlcmluZwoKIyMgLSBQcm9ncmFtbWluZyBnb29kIHByYXRpY2UKCkluIG9yZGVyIG9mIGFwcGVhcmFuY2UgOgoKKiAqKm1lYW5pbmdmdWwgdGl0bGUqKgoqICoqY3VycmVudCBkYXRlKiogOiBrbml0dGluZyBkYXRlLCB0byByZW1lbWJlciB3aGVuIHRoZSBhbmFseXNpcyB3YXMgZG9uZQoqICoqZXhwbGFpbiBnb2FsKiogb2YgdGhlIGRvY3VtZW50CiogKiphZGQgYC5saWJQYXRocygpYCoqIHRvIHRyYWNrIHRoZSBsb2NhdGlvbiBvZiBsaWJyYXJpZXMKKiAqKmxvYWQgZW52aXJvbm1lbnQqKiA6IGxpYnJhcmllcywgZ2xvYmFsIHZhcmlhYmxlcyAoZWcuIHBhdGhzKS4uLiBHcm91cCBldmVyeXRoaW5nIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNjcmlwdCB0byBzZWUgd2hhdCB3aWxsIGJlIG5lZWRlZCAhCiogKipsb2FkIGRhdGEqKgoqICoqdHJhY2sgbGlicmFyaWVzKiogb2Ygb3JpZ2luIGZvciBlYWNoIGZ1bmN0aW9uIHVzaW5nIGBwYWNrYWdlOjpmdW5jdGlvbmAgc3ludGF4IGluc3RlYWQgb2YgYGZ1bmN0aW9uYCwgYmVjYXVzZSBzb21lIHBhY2thZ2VzIG5hbWUgdGhlaXIgZnVuY3Rpb25zIHRoZSBzYW1lIChlZy4gYGZpbHRlcmAgZnVuY3Rpb24pCiogKipzdW1tYXJpemUgdGhlIGVudmlyb25tZW50Kiogd2l0aCBgc2Vzc2lvbkluZm8oKWAgYXMgdGhlIGxhc3QgbGluZSwgaW4gdGhlIGxhc3QgY2h1bmsKKiAuLi4KCiMjIC0gS25pdCBpdCAhCgpXYW91aCAhCgojIC0gSW4gcHJhY3RpY2UKCkluIHByYWN0aWNlLCB3ZSBzdGFydCB3aXRoIGEgcHJlLWZpbGxlZCBSbWFya2Rvd24gZG9jdW1lbnQsIGFuZCBhZGQgaGVhZGVycywgY29kZXMsIGNvbW1lbnRzIGFuZCBmb3JtYXR0aW5nIHdoaWxlIHByb2dyZXNzaW5nIGluIHRoZSBhbmFseXNpcy4gUHJvZ3JhbW1pbmcgYmVzdCBwcmF0aWNlcyBzaG91bGQgYmUgYXBwbGllZCB3aGlsZSB3b3JraW5nLCBhbmQgbm90IGluIHRoZSBlbmQuLi4KCg==