Я хотел бы переопределить значение оператора подмножества [
для работы с (x, y) координатами вместо (i, j) матричной индексной системы. Я бы хотел, чтобы это работало над матрицами (за кадром).
Сначала я думал о создании класса S4 на основе типа матрицы. А затем используйте обобщенную функцию [
и создайте для нее метод, который будет выполнять поднаборы с заменами i
и j
. Но теперь я понял, что не могу изменить подпись универсального:
> getGeneric("[")
standardGeneric for "[" defined from package "base"
function (x, i, j, ..., drop = TRUE)
standardGeneric("[", .Primitive("["))
<bytecode: 0x55f8eef68ad8>
<environment: 0x55f8eef5f310>
Methods may be defined for arguments: x, i, j, drop
Use showMethods("[") for currently available ones.
Так есть ли способ сделать это? Я думаю переписать определение [
, но мне кажется, что это еретик ... Итак, некоторые советы очень ценятся!
Вот некоторый псевдо-R код, который отражает мои мысли о том, как я могу переопределить [
. Ожидаете ли вы неприятностей впереди, если я пойду дальше с этим подходом?
setClass(
"plane",
slots = c(
type = "character",
xlen = "integer",
ylen = "integer",
boundary = "character",
lattice = "matrix"
)
)
`[` <- function(obj, x, y, ..., drop = TRUE) {
if (is(obj, 'plane')) {
lattice <- base::`[`(x = obj@lattice, i = y, j = x, ..., drop = FALSE)
xlen <- length(x)
ylen <- length(y)
new_plane <- plane(type = obj@type,
xlen = xlen,
ylen = ylen,
boundary = obj@boundary)
new_plane@lattice <- lattice
return(new_plane)
}
else
return(base::`[`(x = obj, i = x, j = y, ..., drop = drop))
}