Learn R Programming

⚠️There's a newer version (2.1.1) of this package.Take me there.

caracas: Computer algebra in R

Installation

caracas is available on CRAN and can be installed as usual:

install.packages('caracas')

Please ensure that you have SymPy installed, or else install it:

if (!caracas::has_sympy()) {
  caracas::install_sympy() 
}

To build and install from Github with vignettes run this command from within R (please install remotes first if not already installed):

# install.packages('remotes')
remotes::install_github("r-cas/caracas", build_vignettes = TRUE)

You can also install the package without vignettes if needed as follows:

remotes::install_github("r-cas/caracas")

Configuring the Python environment

The caracas package uses the reticulate package (to run Python code). Thus, if you wish to configure your Python environment, you need to 1) load reticulate, 2) configure the Python environment, and 3) load caracas. The Python environment can be configured as described here. Again, this need to be done before loading caracas.

Development site

See https://github.com/r-cas/caracas.

Online documentation

See https://r-cas.github.io/caracas/.

Origin of name

The name “caracas” is intended to mean “(inter)face to computer algebra system(s)” - notice that “cara” is Spanish (Castellano to be precise) for “face”.

Code of conduct

Please note that the caracas project is released with a Contributor Code of Conduct (available in CODE_OF_CONDUCT.md). By contributing to this project, you agree to abide by its terms.

Brief introduction

library(caracas)
# options(caracas.print.prettyascii = TRUE)
x <- symbol('x')
eq <- 2*x^2 - x
eq
#> [caracas]:    2    
#>            2⋅x  - x
as.character(eq)
#> [1] "2*x^2 - x"
as_expr(eq)
#> expression(2 * x^2 - x)
tex(eq)
#> [1] "2 x^{2} - x"
solve_sys(eq, x)
#> Solution 1:
#>   x =  0 
#> Solution 2:
#>   x =  1/2
der(eq, x)
#> [caracas]: 4⋅x - 1
subs(eq, x, "y")
#> [caracas]:    2    
#>            2⋅y  - y
A <- matrix(c("x", 2, 0, "2*x"), 2, 2)
B <- as_sym(A)
B
#> [caracas]: ⎡x   0 ⎤
#>            ⎢      ⎥
#>            ⎣2  2⋅x⎦
Binv <- inv(B)
Binv
#> [caracas]: ⎡ 1      ⎤
#>            ⎢ ─    0 ⎥
#>            ⎢ x      ⎥
#>            ⎢        ⎥
#>            ⎢-1    1 ⎥
#>            ⎢───  ───⎥
#>            ⎢  2  2⋅x⎥
#>            ⎣ x      ⎦
tex(Binv)
#> [1] "\\left[\\begin{matrix}\\frac{1}{x} & 0\\\\- \\frac{1}{x^{2}} & \\frac{1}{2 x}\\end{matrix}\\right]"
eigenval(Binv)
#> [[1]]
#> [[1]]$eigval
#> [caracas]: 1
#>            ─
#>            x
#> 
#> [[1]]$eigmult
#> [1] 1
#> 
#> 
#> [[2]]
#> [[2]]$eigval
#> [caracas]:  1 
#>            ───
#>            2⋅x
#> 
#> [[2]]$eigmult
#> [1] 1

Please find more examples in the other vignettes available at https://r-cas.github.io/caracas/.

Contribute, issues, and support

Please use the issue tracker at https://github.com/r-cas/caracas/issues if you want to notify us of an issue or need support. If you want to contribute, please either create an issue or make a pull request.

Copy Link

Version

Install

install.packages('caracas')

Monthly Downloads

610

Version

2.0.0

License

GPL

Issues

Pull Requests

Stars

Forks

Maintainer

Mikkel Andersen

Last Published

January 31st, 2023

Functions in caracas (2.0.0)

as_character_matrix

Get matrix as character matrix
as_expr

Convert caracas object to R
cancel

Put rational function into standard form
ask

Ask for a symbol's property
diag

Matrix diagonal
as_sym

Convert R object to caracas symbol
as_func

Convert expression into function object.
diag-set

Replace matrix diagonal
as_diag

Construct diagonal matrix from vector
as_factor_list

Create list of factors as in a product
dim.caracas_symbol

Dimensions of a caracas symbol
has_sympy

Check if 'SymPy' is available
install_sympy

Install 'SymPy'
diff_mat

Difference matrix
def_sym

Define (invisibly) caracas symbols in global environment
add_prefix

Add prefix to each element of matrix
der

Symbolic differentiation of an expression
diag.caracas_symbol

Matrix diagonal
dim<-.caracas_symbol

Dimensions of a caracas symbol
do_la

Do linear algebra operation
doit

Perform calculations setup previously
expand_func

Expand a function expression
expand_log

Expand a logarithmic expression
drop_remainder

Remove remainder term
fraction_parts

Get numerator and denominator of a fraction
jacobian

Compute Jacobian
free_symbols

Get free symbol in expression
lim

Limit of a function
listify

Convert object to list of elements
linalg

Do linear algebra operation
matrix_cross_product

Matrix cross product
%>%

Pipe
collect

Collects common powers of a term in an expression
colspan

Column space (range) of a symbolic matrix
print.caracas_factor_list

Print factor list
der2

Symbolic differentiation of second order of an expression
eval_to_symbol

Create a symbol from a string
expand

Expand expression
diag<-.caracas_symbol

Replace diagonal
solve_sys

Solves a system of non-linear equations
print.caracas_solve_sys_sol

Print solution
get_py

Access 'py' object
special_matrices

Special matrices: zeros, ones, eyes
int

Integrate a function
simplify

Simplify expression
is_sym

Is object a caracas symbol
matrix-products

Matrix multiplication
expand_trig

Expand a trigonometric expression
diag_

Symbolic diagonal matrix
get_sympy

Access 'SymPy' directly
ls_sym

List defined symbols
mat_div_mult

Divide or multiply matrix with factor.
rankMatrix_

Rank of matrix
matrix_

Symbolic matrix
print.caracas_symbol

Print symbol
solve_lin

Solve a linear system of equations
t.caracas_symbol

Transpose of matrix
factor_

Expand expression
taylor

Taylor expansion
reciprocal_matrix

Elementwise reciprocal matrix
[.caracas_symbol

Extract or replace parts of an object
subs

Substitute symbol for value
sympy_version

Get 'SymPy' version
sympy_func

Call a SymPy function directly on x
generic-matrices

Generate generic vectors and matrices
get_basis

Get basis
prod_

Product of a function
symbol_class

Ask type of caracas symbol
[<-.caracas_symbol

Extract or replace parts of an object
sum.caracas_symbol

Summation
texshow

Dump latex representation of sympy object.
to_something

Coerce caracas object
symbol_is_matrix

Check if object is a caracas matrix
vec

Stacks matrix to vector
vectorfy

Creates symbol vector from list of caracas symbols
tex

Export object to TeX
mat_pow

Matrix power
matrify

Creates matrix from array symbol
rowSums_colSums

Form Row and Column Sums
score_hessian

Score and Hessian matrix
tex.caracas_factor_list

Print factor list
sum_

Sum of a function
symbol

Create a symbol
unbracket

Remove inner-most dimension
tuplify

Convert object to tuple
Math.caracas_symbol

Math functions
as.character.caracas_symbol

Convert symbol to character
as_character

Coerce symbol to character
all_vars

All variables
apart

Partial fraction decomposition on a rational function
Ops.caracas_symbol

Math operators
N

Numerical evaluation