To install release version from CRAN, run:
install.packages("rextendr")
or use {remotes}
remotes::install_cran("rextendr")
You can also install {rextendr}
from
r-universe:
install.packages('rextendr', repos = c('https://extendr.r-universe.dev', 'https://cloud.r-project.org'))
Latest development version can be installed from GitHub:
remotes::install_github("extendr/rextendr")
To execute Rust code, you will also need to set up a working Rust toolchain. See the installation instructions for libR-sys for help. If you can successfully build libR-sys you’re good.
Basic use example:
library(rextendr)
# create a Rust function
rust_function("fn add(a:f64, b:f64) -> f64 { a + b }")
# call it from R
add(2.5, 4.7)
#> [1] 7.2
Something more sophisticated:
library(rextendr)
# Rust function that computes a sum of integer or double vectors, preserving the type
rust_function(
"fn get_sum(x : Either<Integers, Doubles>) -> Either<Rint, Rfloat> {
match x {
Either::Left(x) => Either::Left(x.iter().sum()),
Either::Right(x) => Either::Right(x.iter().sum()),
}
}",
use_dev_extendr = TRUE, # Use development version of extendr from GitHub
features = "either", # Enable support for Either crate
extendr_fn_options = list(use_try_from = TRUE) # Enable advanced type conversion
)
x <- 1:5
y <- c(1, 2, 3, 4, 5)
tibble::tibble(
Name = c("x", "y"),
Data = list(x, y),
Types = purrr::map_chr(Data, typeof),
Sum = purrr::map(Data, get_sum),
SumRaw = purrr::flatten_dbl(Sum),
ResultType = purrr::map_chr(Sum, typeof)
)
#> # A tibble: 2 × 6
#> Name Data Types Sum SumRaw ResultType
#> <chr> <list> <chr> <list> <dbl> <chr>
#> 1 x <int [5]> integer <int [1]> 15 integer
#> 2 y <dbl [5]> double <dbl [1]> 15 double
The package also enables a new chunk type for knitr, extendr
, which
compiles and evaluates Rust code. For example, a code chunk such as this
one:
```{extendr}
rprintln!("Hello from Rust!");
let x = 5;
let y = 7;
let z = x*y;
z
```
would create the following output in the knitted document:
rprintln!("Hello from Rust!");
let x = 5;
let y = 7;
let z = x*y;
z
#> Hello from Rust!
#> [1] 35
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.