Introduction
This notebook demonstrates many R Notebook features. Ignore this first chunk for now; we’ll come back to it.
install.packages(c("ggplot2", "dypgraphs", "leaflet"))
Warning in install.packages :
package ‘dypgraphs’ is not available (for R version 3.5.0)
trying URL 'http://cran.rstudio.com/bin/macosx/el-capitan/contrib/3.5/ggplot2_3.0.0.tgz'
Content type 'application/x-gzip' length 3577658 bytes (3.4 MB)
==================================================
downloaded 3.4 MB
trying URL 'http://cran.rstudio.com/bin/macosx/el-capitan/contrib/3.5/leaflet_2.0.2.tgz'
Content type 'application/x-gzip' length 2333320 bytes (2.2 MB)
==================================================
downloaded 2.2 MB
The downloaded binary packages are in
/var/folders/8t/08x7cg6s3bb2x6j5gdyjx0p80000gn/T//RtmpbNlwHp/downloaded_packages
library(ggplot2)
library(dygraphs)
library(leaflet)
Output Types
Console Output
First, let’s create a simple code chunk that prints the numbers from 1 to 10. Run this chunk with Ctrl+Shift+Enter (Cmd+Shift+Enter on OS X).
numbers <- seq_len(15)
numbers
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Notice how the output appears right beneath the chunk, as though you’d run the code at the R console. Try changing the sequence length to 20 and re-running the chunk to see the result update.
Graphical Output
Of course, sometimes your R code doesn’t just produce text; it produces graphical output such as plots. These are supported, too. Try running this chunk:
qplot(Sepal.Length, Petal.Length, data = iris, color = Species,
size = Petal.Width)

Notice that it isn’t necessary to prefix qplot with ggplot2:: since there is a library(ggplot2) call in the setup chunk. RStudio runs the setup chunk automatically whenever it’s needed.
Running Code
One of the goals of the notebook is to provide a seamless environment for interacting with R – that is, you shouldn’t need to reach for the console, even though chunks send code there. To help you see the progress of your chunk – that is, which lines have been executed and which haven’t – RStudio draws an indicator in the editor gutter. Try running this chunk:
Sys.sleep(1); runif(3)
[1] 0.7971705 0.3538843 0.7416623
Sys.sleep(1); runif(3)
[1] 0.05300959 0.35754365 0.85435425
Sys.sleep(1); runif(3)
[1] 0.9829700 0.8460874 0.5377620
Sys.sleep(1); runif(3)
[1] 0.4077510 0.2631094 0.7905881
Sys.sleep(1); runif(3)
[1] 0.9536670 0.6239584 0.6183567
Sometimes you may want to run portions of your chunk rather than the whole thing. That’s just fine too. Try using Ctrl+Enter (OS X: Cmd+Enter) to run this chunk line by line.
cities <- read.csv("cities.csv")
cities
leaflet(cities) %>%
addTiles() %>%
addCircles(lng = ~Long, lat = ~Lat, weight = 1,
radius = ~sqrt(Pop) * 30, popup = ~City)
Notice:
- When we run a chunk line by line, each line is executed as though it were the only line in the chunk, and its output replaces any other output the chunk had.
- If your cursor is in a multi-line statement, the whole statement will be run. This helps avoid the awkward situation in which R is waiting for input at the console, since you can’t see the console!
Alternate Engines
By default, your R notebook chunks will be run using R. However, it’s entirely possible to write chunks that use other engines to execute. For instance, you can add some Python to your notebook:
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
Try using the Feather package for R and Python to transfer data between them.
Rcpp works, too:
#include <Rcpp.h>
// [[Rcpp::export]]
int fibonacci(const int x) {
if (x == 0 || x == 1) return(x);
return (fibonacci(x - 1)) + fibonacci(x - 2);
}
fibonacci(10L)
[1] 55
You can use a notebook to form an executable, documented workflow that composes several tools into a complete data analysis workflow.
Errors
Sometimes your code will generate errors. Here’s an example:
# Source a file that doesn't exist
source("missing.R")
cannot open file 'missing.R': No such file or directoryError in file(filename, "r", encoding = encoding) :
cannot open the connection
Notice that the line that caused the error is highlighted, and you can see the error’s traceback, just as you can in the RStudio console. If an error occurs while you’re running chunks, the error will cause the notebook to stop running, and the cursor will scroll to the point where the error occurred.
Saving and Sharing
A notebook’s source code is always in an .Rmd file. Whenever you save it, a sidecar .nb.html file is generated. This file contains a rendered copy of the notebook itself. No special viewer is required.
It also contains a copy of the notebook’s source .Rmd file.
To look at the .nb.html file, click Preview in the RStudio editor toolbar. This is a fundamental difference between notebooks and other R Markdown documents; pressing this button doesn’t actually cause any of your code to run, it just shows you the HTML file already prepared. It will automatically update whenever you save the .Rmd file.
If you open the .nb.html file in a web browser, you’ll see an option to download the source. You can also open an .nb.html file in RStudio; when you do this, RStudio will automatically extract the .Rmd file and outputs inside it and open the file in the notebook editor.
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayBEZW1vIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAogIGh0bWxfZG9jdW1lbnQ6CiAgICBoaWdobGlnaHQ6IHRleHRtYXRlCiAgICB0aGVtZTogc3BhY2VsYWIKICAgIHRvYzogeWVzCi0tLQoKIyBJbnRyb2R1Y3Rpb24KClRoaXMgbm90ZWJvb2sgZGVtb25zdHJhdGVzIG1hbnkgUiBOb3RlYm9vayBmZWF0dXJlcy4gSWdub3JlIHRoaXMgZmlyc3QgY2h1bmsgZm9yIG5vdzsgd2UnbGwgY29tZSBiYWNrIHRvIGl0LgoKYGBge3Igc2V0dXB9Cmluc3RhbGwucGFja2FnZXMoYygiZ2dwbG90MiIsICJkeXBncmFwaHMiLCAibGVhZmxldCIpKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoZHlncmFwaHMpCmxpYnJhcnkobGVhZmxldCkKYGBgCgojIE91dHB1dCBUeXBlcwoKIyMgQ29uc29sZSBPdXRwdXQKCkZpcnN0LCBsZXQncyBjcmVhdGUgYSBzaW1wbGUgY29kZSBjaHVuayB0aGF0IHByaW50cyB0aGUgbnVtYmVycyBmcm9tIDEgdG8gMTAuIFJ1biB0aGlzIGNodW5rIHdpdGggKkN0cmwrU2hpZnQrRW50ZXIqICgqQ21kK1NoaWZ0K0VudGVyKiBvbiBPUyBYKS4gCgpgYGB7ciBudW1iZXJzfQpudW1iZXJzIDwtIHNlcV9sZW4oMTUpCm51bWJlcnMKYGBgCgpOb3RpY2UgaG93IHRoZSBvdXRwdXQgYXBwZWFycyByaWdodCBiZW5lYXRoIHRoZSBjaHVuaywgYXMgdGhvdWdoIHlvdSdkIHJ1biB0aGUgY29kZSBhdCB0aGUgUiBjb25zb2xlLiBUcnkgY2hhbmdpbmcgdGhlIHNlcXVlbmNlIGxlbmd0aCB0byAyMCBhbmQgcmUtcnVubmluZyB0aGUgY2h1bmsgdG8gc2VlIHRoZSByZXN1bHQgdXBkYXRlLgoKIyMgR3JhcGhpY2FsIE91dHB1dAoKT2YgY291cnNlLCBzb21ldGltZXMgeW91ciBSIGNvZGUgZG9lc24ndCBqdXN0IHByb2R1Y2UgdGV4dDsgaXQgcHJvZHVjZXMgZ3JhcGhpY2FsIG91dHB1dCBzdWNoIGFzIHBsb3RzLiBUaGVzZSBhcmUgc3VwcG9ydGVkLCB0b28uIFRyeSBydW5uaW5nIHRoaXMgY2h1bms6CgpgYGB7ciBncmFwaGljc30KcXBsb3QoU2VwYWwuTGVuZ3RoLCBQZXRhbC5MZW5ndGgsIGRhdGEgPSBpcmlzLCBjb2xvciA9IFNwZWNpZXMsIAogICAgICBzaXplID0gUGV0YWwuV2lkdGgpCmBgYAoKTm90aWNlIHRoYXQgaXQgaXNuJ3QgbmVjZXNzYXJ5IHRvIHByZWZpeCBgcXBsb3RgIHdpdGggYGdncGxvdDI6OmAgc2luY2UgdGhlcmUgaXMgYSBgbGlicmFyeShnZ3Bsb3QyKWAgY2FsbCBpbiB0aGUgc2V0dXAgY2h1bmsuIFJTdHVkaW8gcnVucyB0aGUgc2V0dXAgY2h1bmsgYXV0b21hdGljYWxseSB3aGVuZXZlciBpdCdzIG5lZWRlZC4gCgojIyBIVE1MIFdpZGdldHMKCklmIHlvdXIgUiBhbmFseXNpcyBpbnZvbHZlcyBpbnRlcmFjdGl2ZSBjb21wb25lbnRzLCB5b3UncmUgcHJvYmFibHkgYWxyZWFkeSBmYW1pbGlhciB3aXRoIHRoZSBgaHRtbHdpZGdldHNgIGxpYnJhcnkuIFRoZXNlLCB0b28sIGFyZSBzdXBwb3J0ZWQgaW4gdGhlIG5vdGVib29rLiBSdW4gdGhpcyBjaHVuayB0byBzZWUgYW4gaW50ZXJhY3RpdmUgZ3JhcGg6CgpgYGB7ciB3aWRnZXRzfQpkeWdyYXBoKG5odGVtcCwgbWFpbiA9ICJOZXcgSGF2ZW4gVGVtcGVyYXR1cmVzIikgJT4lIAogIGR5UmFuZ2VTZWxlY3RvcihkYXRlV2luZG93ID0gYygiMTkyMC0wMS0wMSIsICIxOTYwLTAxLTAxIikpCmBgYAoKIyBSdW5uaW5nIENvZGUKCk9uZSBvZiB0aGUgZ29hbHMgb2YgdGhlIG5vdGVib29rIGlzIHRvIHByb3ZpZGUgYSBzZWFtbGVzcyBlbnZpcm9ubWVudCBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBSIC0tIHRoYXQgaXMsIHlvdSBzaG91bGRuJ3QgbmVlZCB0byByZWFjaCBmb3IgdGhlIGNvbnNvbGUsIGV2ZW4gdGhvdWdoIGNodW5rcyBzZW5kIGNvZGUgdGhlcmUuIFRvIGhlbHAgeW91IHNlZSB0aGUgcHJvZ3Jlc3Mgb2YgeW91ciBjaHVuayAtLSB0aGF0IGlzLCB3aGljaCBsaW5lcyBoYXZlIGJlZW4gZXhlY3V0ZWQgYW5kIHdoaWNoIGhhdmVuJ3QgLS0gUlN0dWRpbyBkcmF3cyBhbiBpbmRpY2F0b3IgaW4gdGhlIGVkaXRvciBndXR0ZXIuIFRyeSBydW5uaW5nIHRoaXMgY2h1bms6CgpgYGB7ciBwcm9ncmVzc30KU3lzLnNsZWVwKDEpOyBydW5pZigzKQpTeXMuc2xlZXAoMSk7IHJ1bmlmKDMpClN5cy5zbGVlcCgxKTsgcnVuaWYoMykKU3lzLnNsZWVwKDEpOyBydW5pZigzKQpTeXMuc2xlZXAoMSk7IHJ1bmlmKDMpCmBgYAoKU29tZXRpbWVzIHlvdSBtYXkgd2FudCB0byBydW4gcG9ydGlvbnMgb2YgeW91ciBjaHVuayByYXRoZXIgdGhhbiB0aGUgd2hvbGUgdGhpbmcuIFRoYXQncyBqdXN0IGZpbmUgdG9vLiBUcnkgdXNpbmcgKkN0cmwrRW50ZXIqIChPUyBYOiAqQ21kK0VudGVyKikgdG8gcnVuIHRoaXMgY2h1bmsgbGluZSBieSBsaW5lLgoKYGBge3IgbGluZXdpc2V9CmNpdGllcyA8LSByZWFkLmNzdigiY2l0aWVzLmNzdiIpCmNpdGllcwpsZWFmbGV0KGNpdGllcykgJT4lIAogIGFkZFRpbGVzKCkgJT4lCiAgYWRkQ2lyY2xlcyhsbmcgPSB+TG9uZywgbGF0ID0gfkxhdCwgd2VpZ2h0ID0gMSwKICAgIHJhZGl1cyA9IH5zcXJ0KFBvcCkgKiAzMCwgcG9wdXAgPSB+Q2l0eSkKYGBgCgpOb3RpY2U6CgoxLiBXaGVuIHdlIHJ1biBhIGNodW5rIGxpbmUgYnkgbGluZSwgZWFjaCBsaW5lIGlzIGV4ZWN1dGVkIGFzIHRob3VnaCBpdCB3ZXJlIHRoZSBvbmx5IGxpbmUgaW4gdGhlIGNodW5rLCBhbmQgaXRzIG91dHB1dCByZXBsYWNlcyBhbnkgb3RoZXIgb3V0cHV0IHRoZSBjaHVuayBoYWQuCjIuIElmIHlvdXIgY3Vyc29yIGlzIGluIGEgbXVsdGktbGluZSBzdGF0ZW1lbnQsIHRoZSB3aG9sZSBzdGF0ZW1lbnQgd2lsbCBiZSBydW4uIFRoaXMgaGVscHMgYXZvaWQgdGhlIGF3a3dhcmQgc2l0dWF0aW9uIGluIHdoaWNoIFIgaXMgd2FpdGluZyBmb3IgaW5wdXQgYXQgdGhlIGNvbnNvbGUsIHNpbmNlIHlvdSBjYW4ndCBzZWUgdGhlIGNvbnNvbGUhCgojIyMgQWx0ZXJuYXRlIEVuZ2luZXMKCkJ5IGRlZmF1bHQsIHlvdXIgUiBub3RlYm9vayBjaHVua3Mgd2lsbCBiZSBydW4gdXNpbmcgUi4gSG93ZXZlciwgaXQncyBlbnRpcmVseSBwb3NzaWJsZSB0byB3cml0ZSBjaHVua3MgdGhhdCB1c2Ugb3RoZXIgZW5naW5lcyB0byBleGVjdXRlLiBGb3IgaW5zdGFuY2UsIHlvdSBjYW4gYWRkIHNvbWUgUHl0aG9uIHRvIHlvdXIgbm90ZWJvb2s6CgpgYGB7ciBweXRob24sIGVuZ2luZT0ncHl0aG9uJ30KZGVmIGZpYihuKToKICAgIGEsIGIgPSAwLCAxCiAgICBmb3IgXyBpbiB4cmFuZ2Uobik6CiAgICAgICAgeWllbGQgYQogICAgICAgIGEsIGIgPSBiLCBhICsgYgpwcmludCBsaXN0KGZpYigxMSkpCmBgYAoKVHJ5IHVzaW5nIHRoZSBbRmVhdGhlcl0oaHR0cHM6Ly9naXRodWIuY29tL3dlc20vZmVhdGhlcikgcGFja2FnZSBmb3IgUiBhbmQgUHl0aG9uIHRvIHRyYW5zZmVyIGRhdGEgYmV0d2VlbiB0aGVtLgoKUmNwcCB3b3JrcywgdG9vOgoKYGBge3IgcmNwcCwgZW5naW5lPSdSY3BwJ30KI2luY2x1ZGUgPFJjcHAuaD4KCi8vIFtbUmNwcDo6ZXhwb3J0XV0KaW50IGZpYm9uYWNjaShjb25zdCBpbnQgeCkgewogICAgaWYgKHggPT0gMCB8fCB4ID09IDEpIHJldHVybih4KTsKICAgIHJldHVybiAoZmlib25hY2NpKHggLSAxKSkgKyBmaWJvbmFjY2koeCAtIDIpOwp9CmBgYAoKYGBge3IgcmNwcC1vdXRwdXR9CmZpYm9uYWNjaSgxMEwpCmBgYAoKWW91IGNhbiB1c2UgYSBub3RlYm9vayB0byBmb3JtIGFuIGV4ZWN1dGFibGUsIGRvY3VtZW50ZWQgd29ya2Zsb3cgdGhhdCBjb21wb3NlcyBzZXZlcmFsIHRvb2xzIGludG8gYSBjb21wbGV0ZSBkYXRhIGFuYWx5c2lzIHdvcmtmbG93LgoKIyMgRXJyb3JzCgpTb21ldGltZXMgeW91ciBjb2RlIHdpbGwgZ2VuZXJhdGUgZXJyb3JzLiBIZXJlJ3MgYW4gZXhhbXBsZToKCmBgYHtyIGVycm9ycywgZXJyb3I9VFJVRX0KIyBTb3VyY2UgYSBmaWxlIHRoYXQgZG9lc24ndCBleGlzdApzb3VyY2UoIm1pc3NpbmcuUiIpCmBgYAoKTm90aWNlIHRoYXQgdGhlIGxpbmUgdGhhdCBjYXVzZWQgdGhlIGVycm9yIGlzIGhpZ2hsaWdodGVkLCBhbmQgeW91IGNhbiBzZWUgdGhlIGVycm9yJ3MgdHJhY2ViYWNrLCBqdXN0IGFzIHlvdSBjYW4gaW4gdGhlIFJTdHVkaW8gY29uc29sZS4gSWYgYW4gZXJyb3Igb2NjdXJzIHdoaWxlIHlvdSdyZSBydW5uaW5nIGNodW5rcywgdGhlIGVycm9yIHdpbGwgY2F1c2UgdGhlIG5vdGVib29rIHRvIHN0b3AgcnVubmluZywgYW5kIHRoZSBjdXJzb3Igd2lsbCBzY3JvbGwgdG8gdGhlIHBvaW50IHdoZXJlIHRoZSBlcnJvciBvY2N1cnJlZC4KCiMgU2F2aW5nIGFuZCBTaGFyaW5nCgpBIG5vdGVib29rJ3Mgc291cmNlIGNvZGUgaXMgYWx3YXlzIGluIGFuIGAuUm1kYCBmaWxlLiBXaGVuZXZlciB5b3Ugc2F2ZSBpdCwgYSBzaWRlY2FyIGAubmIuaHRtbGAgZmlsZSBpcyBnZW5lcmF0ZWQuIFRoaXMgZmlsZSBjb250YWlucyBhIHJlbmRlcmVkIGNvcHkgb2YgdGhlIG5vdGVib29rIGl0c2VsZi4gTm8gc3BlY2lhbCB2aWV3ZXIgaXMgcmVxdWlyZWQuCgpJdCBhbHNvIGNvbnRhaW5zIGEgY29weSBvZiB0aGUgbm90ZWJvb2sncyBzb3VyY2UgYC5SbWRgIGZpbGUuCgpUbyBsb29rIGF0IHRoZSBgLm5iLmh0bWxgIGZpbGUsIGNsaWNrICpQcmV2aWV3KiBpbiB0aGUgUlN0dWRpbyBlZGl0b3IgdG9vbGJhci4gVGhpcyBpcyBhIGZ1bmRhbWVudGFsIGRpZmZlcmVuY2UgYmV0d2VlbiBub3RlYm9va3MgYW5kIG90aGVyIFIgTWFya2Rvd24gZG9jdW1lbnRzOyBwcmVzc2luZyB0aGlzIGJ1dHRvbiBkb2Vzbid0IGFjdHVhbGx5IGNhdXNlIGFueSBvZiB5b3VyIGNvZGUgdG8gcnVuLCBpdCBqdXN0IHNob3dzIHlvdSB0aGUgSFRNTCBmaWxlIGFscmVhZHkgcHJlcGFyZWQuIEl0IHdpbGwgYXV0b21hdGljYWxseSB1cGRhdGUgd2hlbmV2ZXIgeW91IHNhdmUgdGhlIGAuUm1kYCBmaWxlLgoKSWYgeW91IG9wZW4gdGhlIGAubmIuaHRtbGAgZmlsZSBpbiBhIHdlYiBicm93c2VyLCB5b3UnbGwgc2VlIGFuIG9wdGlvbiB0byBkb3dubG9hZCB0aGUgc291cmNlLiBZb3UgY2FuIGFsc28gb3BlbiBhbiBgLm5iLmh0bWxgIGZpbGUgaW4gUlN0dWRpbzsgd2hlbiB5b3UgZG8gdGhpcywgUlN0dWRpbyB3aWxsIGF1dG9tYXRpY2FsbHkgZXh0cmFjdCB0aGUgYC5SbWRgIGZpbGUgYW5kIG91dHB1dHMgaW5zaWRlIGl0IGFuZCBvcGVuIHRoZSBmaWxlIGluIHRoZSBub3RlYm9vayBlZGl0b3IuCgojIyBBbHRlcm5hdGUgZm9ybWF0cwoKIyMjIE5vdGVib29rcyBhcyBSIE1hcmtkb3duIERvY3VtZW50cwoKQSBub3RlYm9vayBpcyBhbHNvIGFuIFIgTWFya2Rvd24gZG9jdW1lbnQuIFRyeSBjaGFuZ2luZyB0aGUgWUFNTCBoZWFkZXIgaW4gdGhpcyBkb2N1bWVudCBzbyB0aGF0IGBodG1sX2RvY3VtZW50YCBpcyB0aGUgZmlyc3Qgb3B0aW9uLCB0aGVuIGNsaWNraW5nIGBLbml0YCAob3IganVzdCBwdWxsaW5nIGRvd24gdGhlICpQcmV2aWV3KikgbWVudS4gWW91IGNvdWxkIGFsc28gY3JlYXRlIGEgUERGIGZyb20gdGhlIG5vdGVib29rLCBhIFdvcmQgZG9jdW1lbnQsIG9yIGV2ZW4gYSBkYXNoYm9hcmQuIAogIAojIyMgUiBNYXJrZG93biBEb2N1bWVudHMgYXMgTm90ZWJvb2tzCgpCeSBub3cgeW91J3ZlIHByb2JhYmx5IHJlYWxpemVkIHRoYXQgYW55IFIgTWFya2Rvd24gZG9jdW1lbnQgaXMgYWxzbyBhIG5vdGVib29rLiBJZiB5b3UgZG9uJ3QgbGlrZSB0aGlzIGJlaGF2aW9yIGFuZCBwcmVmZXIgdG8gd29yayB3aXRoIHRoZSBjb25zb2xlIGRpcmVjdGx5LCBwdWxsIGRvd24gdGhlIGdlYXIgaWNvbiBpbiB0aGUgZWRpdG9yIHRvb2xiYXIgYW5kIGNob29zZSBTaG93IENodW5rIE91dHB1dCBJbmxpbmU7IHRoZXJlJ3MgYWxzbyBhIGdsb2JhbCBwcmVmLgoKIyBGdXJ0aGVyIHJlYWRpbmcKCltSIE5vdGVib29rIFJlZmVyZW5jZV0oaHR0cDovL3JtYXJrZG93bi5yc3R1ZGlvLmNvbS9yX25vdGVib29rcy5odG1sKQoK