Я интерпретировал ваш вопрос немного иначе, чем @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
person
IRTFM
schedule
07.11.2011
+
для одного примера. - person Ari B. Friedman   schedule 06.11.2011S3
илиS4
. Цель состоит в том, чтобы иметь возможность выполнять матричные операции над различными полями и, таким образом, моделировать спорадические группы. Это можно сделать и на других языках, но я пытаюсь улучшитьR
. - person isomorphismes   schedule 06.11.2011