The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
as.function.permutation()
in the permutations package:
group actions## function (x, ...)
## {
## a <- NULL
## x <- as.matrix(as.word(x))
## if (nrow(x) == 1) {
## return(as.function(alist(a = , x[, a])))
## }
## else {
## return(as.function(alist(a = , x[cbind(seq_len(nrow(x)),
## a)])))
## }
## }
## <bytecode: 0x64414f1c07b0>
## <environment: namespace:permutations>
To cite the permutations package in publications, please use Hankin (2020). The
permutations
package was intended to manipulate and combine
permutations, but often one wants to consider the effect of a
permutation on the underlying set, taken to be \(\left[n\right]=\left\lbrace
1,2,\ldots,n\right\rbrace\). In other words, we wish to consider
a permutation as a function. In package idiom, coercing a permutation to
a function is straightforward:
## [1] 5
Above we see that permutation \((45)(127)\) maps 4 to 5. We can see from
the function body, at the top of the page, that permutations are coerced
to word form. Function as.function.permutation()
uses
as.matrix()
to stop “x[a,]
” dispatching to
[.word()
and use matrix extraction instead. It might be
argued that unclass()
would be better coding.
Coercion is vectorized:
## [1] 2 7 3 5 4 6 1
## [1] 3 4 2 4 2 3 3 4 1 4 1 3 2 4 1 4 1 2 2 3 1 3 1 2
## [1] 6 2 2 7 3 2 2
The second and third forms use the
alist(a = , x[cbind(seq_len(nrow(x)),a)])
construction. We
now discuss the extent to which the underlying permutation group is
represented in package idiom. Consider the following construction:
## [1] (12)
## Error in x[, a]: subscript out of bounds
On the one hand, object p
is a permutation on the set
\([2]=\left\lbrace 1,2\right\rbrace\).
The action of this permutation on 3 is not defined, and the package
returns an error. Above we effectively see
## Error in t(1:2)[, 3]: subscript out of bounds
which is the origin of the error. On the other hand, one might
reasonably hold that the action of \((12)\) on 3 should be 3, on the grounds
that \((12)\) transposes elements 1 and
2 and leaves all other elements unchanged. To realise this
interpretation we need to ensure that p
has underlying set
including 3, in this case \(\left\lbrace
1,2,3\right\rbrace\). This is straightforward with
as.word()
:
## [1] 3
The ever-problematic identity permutation acts on the empty set so its functionalization always returns an error:
## Error in x[, a]: subscript out of bounds
Again the resolution is to coerce to word form with explicit
n
:
## [1] 4
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.