Learn R Programming

The clifford package: Clifford algebra in R

The clifford package provides R-centric functionality for working with Clifford algebras of arbitrary dimension and signature. A detailed vignette is provided in the package.

Installation

You can install the released version of the clifford package from CRAN with:

# install.packages("clifford")  # uncomment this to install the package
library("clifford")
set.seed(0)

The clifford package in use

The basic creation function is clifford(), which takes a list of basis blades and a vector of coefficients:

(a <- clifford(list(1,2,1:4,2:3),1:4))
#> Element of a Clifford algebra, equal to
#> + 1e_1 + 2e_2 + 4e_23 + 3e_1234
(b <- clifford(list(2,2:3,1:2),c(-2,3,-3)))
#> Element of a Clifford algebra, equal to
#> - 2e_2 - 3e_12 + 3e_23

So a and b are multivectors. Clifford objects are a vector space and we can add them using +:

a+b
#> Element of a Clifford algebra, equal to
#> + 1e_1 - 3e_12 + 7e_23 + 3e_1234

See how the e2 term vanishes and the e_23 term is summed. The package includes a large number of products:

a*b        # geometric product (also "a % % b")
#> Element of a Clifford algebra, equal to
#> - 16 + 6e_1 - 3e_2 - 2e_12 + 14e_3 + 12e_13 + 3e_123 - 9e_14 + 9e_34 - 6e_134
a %^% b    # outer product
#> Element of a Clifford algebra, equal to
#> - 2e_12 + 3e_123
a %.% b    # inner product
#> Element of a Clifford algebra, equal to
#> - 16 + 6e_1 - 3e_2 + 14e_3 - 9e_14 + 9e_34 - 6e_134
a %star% b # scalar product
#> [1] -16
a %euc% b  # Euclidean product
#> [1] 8

The package can deal with non positive-definite inner products. Suppose we wish to deal with an inner product of

where the diagonal is a number of terms followed by a number of terms. The package idiom for this would be to use signature():

signature(3)

Function signature() is based on lorentz::sol() and its argument specifies the number of basis blades that square to , the others squaring to . Thus and :

basis(1)
#> Element of a Clifford algebra, equal to
#> + 1e_1
basis(1)^2
#> Element of a Clifford algebra, equal to
#> scalar ( 1 )
basis(4)
#> Element of a Clifford algebra, equal to
#> + 1e_4
basis(4)^2
#> Element of a Clifford algebra, equal to
#> the zero clifford element (0)

The package uses the STL map class with dynamic bitset keys for efficiency and speed and can deal with objects of arbitrary dimensions. Thus:

options("basissep" = ",")
(x <- rcliff(d=20))
#> Element of a Clifford algebra, equal to
#> + 5 - 1e_2 + 6e_5 + 2e_4,7 - 3e_10 - 5e_11 + 3e_14 + 1e_10,14 + 4e_5,9,15 +
#> 9e_18,19
summary(x^3)
#> Element of a Clifford algebra 
#> Typical terms:  140  ...  + 216e_5,9,10,14,15,18,19 
#> Number of terms: 44 
#> Magnitude: 25376

References

  • D. Hestenes 1987. Clifford algebra to geometric calculus, Kluwer.
  • J. Snygg 2010. A new approach to differential geometry using Clifford’s geometric algebra. Berghauser.
  • C. Perwass 2009. Geometric algebra with applications in engineering. Springer.

Further information

For more detail, see the package vignette

vignette("clifford")

Copy Link

Version

Install

install.packages('clifford')

Monthly Downloads

286

Version

1.1-0

License

GPL (>= 2)

Issues

Pull Requests

Stars

Forks

Maintainer

Robin K S Hankin

Last Published

May 1st, 2025

Functions in clifford (1.1-0)

even

Even and odd clifford objects
print

Print clifford objects
grade

The grade of a clifford object
horner

Horner's method
homog

Homogenous Clifford objects
minus

Take the negative of a vector
magnitude

Magnitude of a clifford object
numeric_to_clifford

Coercion from numeric to Clifford form
involution

Clifford involutions
lowlevel

Low-level helper functions for clifford objects
pseudoscalar

Coercion from numeric to Clifford form
summary.clifford

Summary methods for clifford objects
quaternion

Quaternions using Clifford algebras
term

Deal with terms
zero

The zero Clifford object
as.vector

Coerce a clifford vector to a numeric vector
signature

The signature of the Clifford algebra
zap

Zap small values in a clifford object
rcliff

Random clifford objects
const

The constant term of a Clifford object
dot-class

Class “dot”
clifford-package

tools:::Rd_package_title("clifford")
Extract.clifford

Extract or Replace Parts of a clifford
Ops.clifford

Arithmetic Ops Group Methods for clifford objects
allcliff

Clifford object containing all possible terms
antivector

Antivectors or pseudovectors
cartan

Cartan map between clifford algebras
drop

Drop redundant information
clifford

Create, coerce, and test for clifford objects