`rray_rotate()`

rotates an array along the plane defined by `c(from, to)`

. It
can be thought of as sequentially rotating the array 90 degrees a set number
of `times`

.

rray_rotate(x, from = 1, to = 2, times = 1)

x | A matrix, array, or rray. |
---|---|

from, to | Single integer values. The direction of the rotation goes
from |

times | A single integer. The number of times to perform the rotation.
One of: |

`x`

rotated along the axis described by `from`

and `to`

.

A rotation can be a hard thing to wrap your head around. I encourage looking at the examples and starting with 2D to try and understand what is happening before moving up to higher dimensions.

Note that a rotation is *not* the same thing as a transpose.

Generally, you can predict the output of rotating using `from`

and `to`

by switching the dimensions at the `from`

and `to`

axes position. This gives
you the shape of the output. So, a `(5, 2, 4)`

array rotated using `from = 1`

and `to = 3`

would have a resulting shape of `(4, 2, 5)`

. Note that using
`from = 3`

and `to = 1`

would give the same shape. The "direction"
of how these are rotated is controlled by the ordering of `from`

and `to`

.

# --------------------------------------------------------------------------- # 2D example x <- rray(1:6, c(3, 2)) x <- rray_set_row_names(x, c("r1", "r2", "r3")) x <- rray_set_col_names(x, c("c1", "c2")) # "counter clockwise" rotation turning the # rows into columns rray_rotate(x)#> <rray<int>[,3][2]> #> r1 r2 r3 #> c2 4 5 6 #> c1 1 2 3# "clockwise" by reversing the direction rray_rotate(x, from = 2, to = 1)#> <rray<int>[,3][2]> #> r3 r2 r1 #> c1 3 2 1 #> c2 6 5 4# Rotate twice (180 degrees) # Direction doesn't matter here, the following # give the same result rray_rotate(x, times = 2)#> <rray<int>[,2][3]> #> c2 c1 #> r3 6 3 #> r2 5 2 #> r1 4 1rray_rotate(x, from = 2, to = 1, times = 2)#> <rray<int>[,2][3]> #> c2 c1 #> r3 6 3 #> r2 5 2 #> r1 4 1# --------------------------------------------------------------------------- # 3D example x_3d <- rray_expand(x, 3) # - Rotations on the (1, 3) axis plane # - Dimensions go from (3, 2, 1) -> (1, 2, 3) in both cases # - And the direction of how that happens is controlled # by `from` and `to` rray_rotate(x_3d, from = 1, to = 3)#> <rray<int>[,2,3][1]> #> , , r1 #> #> c1 c2 #> [1,] 1 4 #> #> , , r2 #> #> c1 c2 #> [1,] 2 5 #> #> , , r3 #> #> c1 c2 #> [1,] 3 6 #>rray_rotate(x_3d, from = 3, to = 1)#> <rray<int>[,2,3][1]> #> , , r3 #> #> c1 c2 #> [1,] 3 6 #> #> , , r2 #> #> c1 c2 #> [1,] 2 5 #> #> , , r1 #> #> c1 c2 #> [1,] 1 4 #>