Я истолковал ваш вопрос немного иначе, чем @Andrie, но он уже проделал кучу необходимой работы в классе S3.Я думал, что вы хотите разработать групповые операции для группы из пяти элементов или, возможно, кольца.Затем вам понадобится операция «+» с элементом идентичности == 0 и, возможно, операция «*» с элементом идентичности == 1.
Если вы хотите, чтобы неотрицательные целые числа отображались в этом, вы должны использоватьарифметические операторы по модулю, %%
и, возможно, %/%
:
?Ops
as.g5 <- function(x){
if(!inherits(x, "g5")) class(x) <- c("g5", class(x))
x %% 5
}
print.g5 <- function(x, ...){
cat("G5 equivalent:\n")
cat(x %% 5)
invisible(x)
}
Если вам нужны два оператора, вы можете искать:
`+.g5` <- function(e1, e2){
NextMethod(e1 ,e2) %% 5
}
`*.g5` <- function(e1, e2){
NextMethod(e1 ,e2) %% 5
}
x <- as.g5(0:10)
y <- as.g5(5)
x + y
#G5 equivalent:
#0 1 2 3 4 0 1 2 3 4 0
y <- as.g5(2)
x * y
#G5 equivalent:
#0 2 4 1 3 0 2 4 1 3 0
Также можно использовать эти операциина «изменчивых» версиях векторов:
as.g5(1:10) * as.g5(1:10)
# G5 equivalent:
# 1 4 4 1 0 1 4 4 1 0