magic (version 1.5-9)

shift: Shift origin of arrays and vectors

Description

Shift origin of arrays and vectors.

Usage

shift(x, i=1)
ashift(a, v=rep(1,length(dim(a))))

Arguments

x

Vector to be shifted

i

Number of places elements to be shifted, with default value of 1 meaning to put the last element first, followed by the first element, then the second, etc

a

Array to be shifted

v

Vector of numbers to be shifted in each dimension, with default value corresponding to shift()ing each dimension by 1 unit. If the length of v is less than length(dim(a)), it is padded with zeros (thus a scalar value of i indicates that the first dimension is to be shifted by i units)

Details

Function shift(x,n) returns \(P^n(x)\) where \(P\) is the permutation \((n,1,2,\ldots,n-1)\).

Function ashift is the array generalization of this: the \(n^{\rm th}\) dimension is shifted by v[n]. In other words, ashift(a,v)=a[shift(1:(dim(a)[1]),v[1]),...,shift(1:(dim(a)[n]),v[n])]. It is named by analogy with abind() and aperm().

This function is here because a shifted semimagic square or hypercube is semimagic and a shifted pandiagonal square or hypercube is pandiagonal (note that a shifted magic square is not necessarily magic, and a shifted perfect hypercube is not necessarily perfect).

Examples

Run this code
# NOT RUN {
shift(1:10,3)
m <- matrix(1:100,10,10)
ashift(m,c(1,1))
ashift(m,c(0,1))    #note columns shifted by 1, rows unchanged.
ashift(m,dim(m))    #m unchanged (Mnemonic).
# }

Run the code above in your browser using DataLab