[Table of Contents]
Package JuliaCall is an R interface to Julia, which is a high-level,
high-performance dynamic programming language for numerical computing,
see https://julialang.org/ for more information. Below is an image for
Mandelbrot set.
JuliaCall brings more than 100 times speedup of the calculation!
See
https://github.com/Non-Contradiction/JuliaCall/tree/master/example/mandelbrot
for more
information.
JuliaCall is on CRAN now! To use package JuliaCall, you first have
to install Julia on your computer, you can
download a generic binary from https://julialang.org/downloads/ and
add it to your path, and then you can install JuliaCall just like any
other R packages by
install.packages("JuliaCall")You can get the development version of JuliaCall by
devtools::install_github("Non-Contradiction/JuliaCall")library(JuliaCall)
## Do initial setup
julia <- julia_setup()
#> Julia version 0.6.4 at location /Applications/Julia-0.6.app/Contents/Resources/julia/bin will be used.
#> Loading setup script for JuliaCall...
#> Finish loading setup script for JuliaCall.
## If you want to use a julia at a specific location, you could do the following:
## julia_setup(JULIA_HOME = "the folder that contains julia binary"),
## or you can set JULIA_HOME in command line environment or use `options(...)`
## Different ways for using Julia to calculate sqrt(2)
# julia$command("a = sqrt(2);"); julia$eval("a")
julia_command("a = sqrt(2);"); julia_eval("a")
#> [1] 1.414214
julia_eval("sqrt(2)")
#> [1] 1.414214
julia_call("sqrt", 2)
#> [1] 1.414214
julia_eval("sqrt")(2)
#> [1] 1.414214
julia_assign("x", sqrt(2)); julia_eval("x")
#> [1] 1.414214
julia_assign("rsqrt", sqrt); julia_call("rsqrt", 2)
#> [1] 1.414214
2 %>J% sqrt
#> [1] 1.414214
## You can use `julia$exists` as `exists` in R to test
## whether a function or name exists in Julia or not
julia_exists("sqrt")
#> [1] TRUE
julia_exists("c")
#> [1] FALSE
## You can use `julia$help` to get help for Julia functions
julia_help("sqrt")
#> ```
#> sqrt(x)
#> ```
#>
#> Return $\sqrt{x}$. Throws [`DomainError`](@ref) for negative [`Real`](@ref) arguments. Use complex negative arguments instead. The prefix operator `√` is equivalent to `sqrt`.
## Functions related to installing and using Julia packages
julia_install_package("Optim")
julia_install_package_if_needed("Optim")
julia_installed_package("Optim")
#> [1] "0.14.1"
julia_library("Optim")Make sure the Julia installation is correct. JuliaCall is able to
find Julia on PATH, and there are three ways for JuliaCall to find
Julia not on PATH.
- Use
julia_setup(JULIA_HOME = "the folder that contains julia binary") - Use
options(JULIA_HOME = "the folder that contains julia binary") - Set
JULIA_HOMEin command line environment.
- One way to get help for julia functions is just using
julia$helplike the following example:
julia_help("sqrt")
#> ```
#> sqrt(x)
#> ```
#>
#> Return $\sqrt{x}$. Throws [`DomainError`](@ref) for negative [`Real`](@ref) arguments. Use complex negative arguments instead. The prefix operator `√` is equivalent to `sqrt`.-
The GitHub Pages for this repository host the documentation for the development version of
JuliaCall: https://non-contradiction.github.io/JuliaCall/. -
And you are more than welcome to contact me about
JuliaCallat lch34677@gmail.com or cxl508@psu.edu.
If you are interested in developing an R package which is an interface
for a Julia package, JuliaCall is an ideal choice for that!
Basically you only need to find the Julia function or Julia module you
want to have in R and then just using the module and call the
function. Several examples are:
diffeqris a package for solving differential equations inR. It utilizes DifferentialEquations.jl for its core routines to give high performance solving of ordinary differential equations (ODEs), stochastic differential equations (SDEs), delay differential equations (DDEs), and differential-algebraic equations (DAEs) directly inR.convexjlris anRpackage for Disciplined Convex Programming (DCP) by providing a high level wrapper forJuliapackageConvex.jl.convexjlrcan solve linear programs, second order cone programs, semidefinite programs, exponential cone programs, mixed-integer linear programs, and some other DCP-compliant convex programs throughConvex.jl.ipoptjlrprovides anRinterface to theIpoptnonlinear optimization solver. It provides a simple high-level wrapper forJuliapackage [Ipopt.jl] (https://github.com/JuliaOpt/Ipopt.jl).- Julia MixedModels from R
illustrates how to use
JuliaCallandJuliapackageMixedModels.jlto build mixed models inR. autodiffrprovides automatic differentiation to nativeRfunctions by wrappingJuliapackagesForwardDiff.jlandReverseDiff.jlthroughJuliaCall, which is a work in progress.
If you have any issues in developing an R package using JuliaCall,
you may report it using the link:
https://github.com/Non-Contradiction/JuliaCall/issues/new. Or email me
at lch34677@gmail.com or cxl508@psu.edu.
JuliaCall is under active development now. Any suggestion or issue
reporting is welcome! You may report it using the link:
https://github.com/Non-Contradiction/JuliaCall/issues/new. Or email me
at lch34677@gmail.com or cxl508@psu.edu.
And if you encounter some issues which crash R or RStudio, then you
may have met segfault errors. I am very sorry. And I am trying my best
to remove errors like that. It will be much appreciated if you can
- download the source of
JuliaCallfrom Github, - open
JuliaCall.Rprojin your RStudio or openRfrom the directory where you download the source ofJuliaCall, - run
devtools::check()to see the result ofR CMD checkforJuliaCallon your machine, - and paste the result to the issue report.
RCall.jlis aJuliapackage which embedsRinJulia.JuliaCallis inspired byRCall.jland depends onRCall.jlfor many functionalities like much of the type conversion betweenRandJulia.XRJuliais anRpackage based on John Chambers’XRpackage and allow for structured integration ofRwithJulia. It connects toJuliaand uses JSON to transfer data betweenJuliaandR.RJuliais anRpackage which embedsJuliainRas well asJuliaCall. It is not on CRAN yet and I haven’t tested it.
