# onion v1.5-0

Monthly downloads

## Octonions and Quaternions

Quaternions and Octonions are four- and eight- dimensional
extensions of the complex numbers. They are normed division
algebras over the real numbers and find applications in spatial
rotations (quaternions), and string theory and relativity
(octonions). The quaternions are noncommutative and the octonions
nonassociative. See the package vignette for more details.

## Readme

# Quaternions and octonions in R

# Overview

The `onion`

package provides functionality for working with quaternions
and octonions in R. A detailed vignette is provided in the package.

Informally, the *quaternions*, usually denoted
,
are a generalization of the complex numbers represented as a
four-dimensional vector space over the reals. An arbitrary quaternion
represented as

where and are the quaternion units linked by the equations

which, together with distributivity, define quaternion multiplication. We can see that the quaternions are not commutative, for while , it is easy to show that . Quaternion multiplication is, however, associative (the proof is messy and long).

Defining

shows that the quaternions are a division algebra: division works as expected (although one has to be careful about ordering terms).

The *octonions*
are essentially a pair of quaternions, with a general octonion written

(other notations are sometimes used); Baez gives a multiplication table for the unit octonions and together with distributivity we have a well-defined division algebra. However, octonion multiplication is not associative and we have in general.

# Installation

You can install the released version of onion from CRAN with:

```
# install.packages("onion") # uncomment this to install the package
library("onion")
```

# The `onion`

package in use

The basic quaternions are denoted `H1`

, `Hi`

, `Hj`

and `Hk`

and these
should behave as expected in R idiom:

```
a <- 1:9 + Hi -2*Hj
a
#> [1] [2] [3] [4] [5] [6] [7] [8] [9]
#> Re 1 2 3 4 5 6 7 8 9
#> i 1 1 1 1 1 1 1 1 1
#> j -2 -2 -2 -2 -2 -2 -2 -2 -2
#> k 0 0 0 0 0 0 0 0 0
a*Hk
#> [1] [2] [3] [4] [5] [6] [7] [8] [9]
#> Re 0 0 0 0 0 0 0 0 0
#> i -2 -2 -2 -2 -2 -2 -2 -2 -2
#> j -1 -1 -1 -1 -1 -1 -1 -1 -1
#> k 1 2 3 4 5 6 7 8 9
Hk*a
#> [1] [2] [3] [4] [5] [6] [7] [8] [9]
#> Re 0 0 0 0 0 0 0 0 0
#> i 2 2 2 2 2 2 2 2 2
#> j 1 1 1 1 1 1 1 1 1
#> k 1 2 3 4 5 6 7 8 9
```

Function `rquat()`

generates random quaternions:

```
a <- rquat(9)
names(a) <- letters[1:9]
a
#> a b c d e f
#> Re 1.2629543 0.4146414 -0.005767173 -1.1476570 0.2522234 -0.2242679
#> i -0.3262334 -1.5399500 2.404653389 -0.2894616 -0.8919211 0.3773956
#> j 1.3297993 -0.9285670 0.763593461 -0.2992151 0.4356833 0.1333364
#> k 1.2724293 -0.2947204 -0.799009249 -0.4115108 -1.2375384 0.8041895
#> g h i
#> Re -0.05710677 -1.28459935 -0.4333103
#> i 0.50360797 0.04672617 -0.6494716
#> j 1.08576936 -0.23570656 0.7267507
#> k -0.69095384 -0.54288826 1.1519118
a[6] <- 33
a
#> a b c d e f g
#> Re 1.2629543 0.4146414 -0.005767173 -1.1476570 0.2522234 33 -0.05710677
#> i -0.3262334 -1.5399500 2.404653389 -0.2894616 -0.8919211 0 0.50360797
#> j 1.3297993 -0.9285670 0.763593461 -0.2992151 0.4356833 0 1.08576936
#> k 1.2724293 -0.2947204 -0.799009249 -0.4115108 -1.2375384 0 -0.69095384
#> h i
#> Re -1.28459935 -0.4333103
#> i 0.04672617 -0.6494716
#> j -0.23570656 0.7267507
#> k -0.54288826 1.1519118
cumsum(a)
#> a b c d e f g
#> Re 1.2629543 1.6775957 1.6718285 0.5241715 0.7763950 33.7763950 33.7192882
#> i -0.3262334 -1.8661834 0.5384700 0.2490084 -0.6429127 -0.6429127 -0.1393047
#> j 1.3297993 0.4012322 1.1648257 0.8656106 1.3012939 1.3012939 2.3870632
#> k 1.2724293 0.9777089 0.1786996 -0.2328112 -1.4703496 -1.4703496 -2.1613035
#> h i
#> Re 32.43468886 32.0013785
#> i -0.09257857 -0.7420502
#> j 2.15135668 2.8781074
#> k -2.70419172 -1.5522800
```

## Octonions

Octonions follow the same general pattern and we may show nonassociativity numerically:

```
x <- roct(5)
y <- roct(5)
z <- roct(5)
x*(y*z) - (x*y)*z
#> [1] [2] [3] [4] [5]
#> Re 0.000000 -5.329071e-15 -1.776357e-15 -8.881784e-16 8.881784e-16
#> i 7.201225 1.045435e+00 -3.015861e+00 -4.261327e+00 8.612680e+00
#> j 6.177845 -5.797569e+00 -5.642415e+00 -6.342342e+00 1.118819e+01
#> k -4.917863 -4.484153e+00 -1.591524e+01 -1.119394e+00 1.571936e+01
#> l -1.403122 1.827970e-01 7.268523e+00 -6.298392e-01 -3.564195e+00
#> il -4.950594 4.440918e+00 9.922722e+00 -7.116999e-01 7.448039e+00
#> jl 5.253879 9.239258e+00 7.195855e+00 4.224830e+00 -4.883673e+00
#> kl -2.031907 1.159402e+01 -1.147093e+01 -1.264476e+00 -2.728531e+00
```

# References

- RKS Hankin (2006). “Normed division algebras with R: introducing the
onion package”.
*R News*, 6(2):49-52 - JC Baez (2001). “The octonions”.
*Bulletin of the American Mathematical Society*, 39(5), 145–205

# Further information

For more detail, see the package vignette

`vignette("onionpaper")`

## Functions in onion

Name | Description | |

Math | Various logarithmic and circular functions for onions | |

Complex | Complex functionality for onions | |

O1 | Unit onions | |

Logic | Logical operations on onions | |

Arith | Methods for Function Arith in package Onion | |

bind | Binding of onionmats | |

bunny | The Stanford Bunny | |

cumsum | Cumulative sums and products of onions | |

sum | Various summary statistics for onions | |

onionmat | Onionic matrices | |

Compare-methods | Methods for compare S4 group | |

biggest | Returns the biggest type of a set of onions | |

length | Length of an octonionic vector | |

threeform | Various non-field diagnostics | |

orthogonal | Orthogonal matrix equivalents | |

names | Names of an onionic vector | |

c | Concatenation | |

roct | Random onionic vector | |

Extract | Extract or Replace Parts of onions or glubs | |

condense | Condense an onionic vector into a short form | |

onion-package | onion | |

rotate | Rotates 3D vectors using quaternions | |

prods | Various products of two onions | |

rep | Replicate elements of onionic vectors | |

onion | Basic onion functions | |

p3d | Three dimensional plotting | |

onion-class | Class “onion” | |

plot | Plot onions | |

zapsmall | Concatenation | |

seq | seq method for onions | |

show | Print method for onions | |

No Results! |

## Vignettes of onion

Name | ||

onionmat.Rmd | ||

onionpaper.Rnw | ||

onionpaper.bib | ||

No Results! |

## Last month downloads

## Details

LazyData | TRUE |

License | GPL-2 |

VignetteBuilder | knitr |

URL | https://github.com/RobinHankin/onion |

BugReports | https://github.com/RobinHankin/onion/issues |

NeedsCompilation | yes |

Packaged | 2021-02-11 01:14:49 UTC; rhankin |

Repository | CRAN |

Date/Publication | 2021-02-11 07:00:02 UTC |

#### Include our badge in your README

```
[![Rdoc](http://www.rdocumentation.org/badges/version/onion)](http://www.rdocumentation.org/packages/onion)
```