This document demonstrates how to use various R packages to add
interactivity and utilize different programming languages within
RStudio. You’ll learn about popular packages like leaflet
and plotly, which enable interactive data visualizations,
as well as how to incorporate languages like Python, C++, and Bash
directly into RMarkdown.
For source code see github page.
lop <- c("reticulate", "Rcpp", "leaflet", "ggplot2", "plotly", "visNetwork", "DT")
to_instal <- lop[which(x = !lop %in% installed.packages()[,"Package"])]
if(length(x = to_instal) != 0) {
install.packages(pkgs = to_instal)
}
aux <- lapply(X = lop, FUN = library, character.only = TRUE)
rm(list = c("lop", "to_instal", "aux"))
gc()## used (Mb) gc trigger (Mb) max used (Mb)
## Ncells 1973832 105.5 3890660 207.8 2661311 142.2
## Vcells 3400746 26.0 8388608 64.0 4806098 36.7
This code block installs and loads a set of essential packages used in this document. Here’s a quick overview of each:
reticulate: Integrates Python into R,
allowing you to run Python code in R scripts.Rcpp: Links R with C++ code, enabling
high-performance computation.leaflet: Used for creating interactive
maps.ggplot2: A powerful data visualization
package.plotly: Provides interactive plots and
works seamlessly with ggplot2.visNetwork: Allows creation of network
visualizations.DT: Displays data tables with
interactive features.RStudio supports multi-language workflows, letting you run code in Python, C++, and Bash within an RMarkdown file.
Using the reticulate package, we can run Python code in
RStudio.
In this example, we create a variable in Python and access it from R.
## 0.30000000000000004
## [1] 0.3
Similarly, we can define a variable in R and access it in Python.
## [-0.9716642619059848, -1.2537200556172345, 0.40997290865026154, 0.9794892034230105, 1.293607471665794, 2.1111744801577332, 0.08063494948001483, -0.8390692946026795, -1.075719032876108, -1.1267352860592397]
With the Rcpp package, we can write C++ code directly in
RMarkdown. Here’s a simple example function written in C++ to double
each element of a vector.
#include <Rcpp.h>
//[[Rcpp::export]]
Rcpp::IntegerVector add_number(Rcpp::IntegerVector x) {
return x + x;
}We can call this function in R:
## [1] 4 368
Bash commands can be executed in RMarkdown, making it easy to interact with the command line. For more Bash examples, see this link.
## Hello Bash!
## total 6525
## drwxr-xr-x 1 42073 42073 0 Nov 6 17:05 .
## drwxr-xr-x 1 42073 42073 0 Nov 6 17:05 ..
## -rw-r--r-- 1 42073 42073 1535 Nov 6 17:05 01_data_import.R
## -rw-r--r-- 1 42073 42073 2094 Nov 6 17:05 02_datatable.R
## -rw-r--r-- 1 42073 42073 3436 Nov 6 17:05 03_ggplot2.R
## -rw-r--r-- 1 42073 42073 6698 Nov 6 17:09 04_markdown.Rmd
## -rw-r--r-- 1 42073 42073 6647967 Nov 6 17:05 04_markdown.html
## -rw-r--r-- 1 42073 42073 164 Nov 6 17:05 XX_usethis.R
## drwxr-xr-x 1 42073 42073 0 Nov 6 17:05 rsconnect
HTML widgets in R enable interactive data visualizations directly within RMarkdown.
leaflet is a powerful package for creating interactive
maps in R. In this example, we use earthquake data (quakes)
and map the locations with markers.
## lat long depth mag stations
## 1 -20.42 181.62 562 4.8 41
## 2 -20.62 181.03 650 4.2 15
## 3 -26.00 184.10 42 5.4 43
## 4 -17.97 181.66 626 4.1 19
## 5 -20.42 181.96 649 4.0 11
## 6 -19.68 184.31 195 4.0 12
The plotly package allows you to create interactive
plots. It integrates well with ggplot2, allowing static
ggplot objects to be made interactive.
Here’s a bar plot of diamond cuts by clarity, enhanced with
plotly.
The visNetwork package enables interactive network
visualization in R.
nodes <- data.frame(id = 1:6, title = paste("node", 1:6), shape = c("dot", "square"), size = 10:15, color = c("blue", "red"))
edges <- data.frame(from = 1:5, to = c(5, 4, 6, 3, 3))
head(x = nodes)## id title shape size color
## 1 1 node 1 dot 10 blue
## 2 2 node 2 square 11 red
## 3 3 node 3 dot 12 blue
## 4 4 node 4 square 13 red
## 5 5 node 5 dot 14 blue
## 6 6 node 6 square 15 red
The following example demonstrates customization with different node shapes, colors, and interactive options:
nodes <- data.frame(id = 1:10,
label = paste("Node", 1:10),
group = c("GrA", "GrB"),
value = 1:10,
shape = c("square", "triangle", "box", "circle", "dot", "star",
"ellipse", "database", "text", "diamond"),
title = paste0("<p><b>", 1:10,"</b><br>Node !</p>"),
color = c("darkred", "grey", "orange", "darkblue", "purple"),
shadow = c(FALSE, TRUE, FALSE, TRUE, TRUE))
edges <- data.frame(from = sample(1:10,8), to = sample(1:10, 8),
label = paste("Edge", 1:8),
length = c(100,500),
arrows = c("to", "from", "middle", "middle;to"),
dashes = c(TRUE, FALSE),
title = paste("Edge", 1:8),
smooth = c(FALSE, TRUE),
shadow = c(FALSE, TRUE, FALSE, TRUE))
visNetwork(nodes = nodes, edges = edges) %>%
visOptions(highlightNearest = TRUE, nodesIdSelection = TRUE)In RMarkdown, you can use LaTeX to format mathematical expressions. Here’s the formula for the three-parameter Generalized Pareto distribution (GPD):
\[ f(x) = \alpha^{-1}e^{-(1 - \kappa)y}, \quad y = \begin{cases} -\kappa^{-1}\log \Big[ 1 - \frac{\kappa(x - \xi)}{\alpha} \Big], & \kappa \neq 0,\\ \frac{(x - \xi)}{\alpha}, & \kappa = 0. \end{cases} \]
where: - \(\xi\): location parameter - \(\alpha > 0\): scale parameter - \(\kappa\): shape parameter, affecting the range of \(x\).
This setup provides a flexible base for using RMarkdown to demonstrate code, visualizations, and interactivity.