Я задавался вопросом о классах S3 в R, если есть возможность определить элемент вывода по умолчанию и сохранить скрытые элементы остальных элементов. В качестве примера, предположим, что у нас есть функция игрушка, которая вычисляет определенные вещи и сообщает их обратно как класс S3, как это:Элемент по умолчанию класса S3
toy <- function(x){
resA <- mean(x)
resB <- length(x)
output <- list(resA=resA, resB=resB, x=x)
class(output) <- "toy"
output
}
Когда мы достигаем результат в настоящее время с помощью
res <- toy(c(1:10))
res
мы получаем весь список как результат, как и следовало ожидать. Но если мы определяем то также метод печати S3
`print.toy` <- function(x){
print(x$resA)
}
мы можем дать стандартный вывод для печати, которая скрывает ненужную информацию (в этом случае resB
и x
), и пользователь видит только resA
. Но это может вызвать некоторую путаницу, когда вы хотите применить дальнейшие вычисления на свой объект класса toy
, например.
res <- toy(c(1:10))
res
# Produces an error
res + 1
# Accesses the correct variable of class toy:
res$resA + 1
Мой вопрос теперь, есть способ определить элемент resA
списка, чтобы быть стандартное значение класса S3, которые должны быть приняты, если не указано ни одной переменной, так что res + 1
вызов будет работать, как хорошо ?
Спасибо за это.
Я думаю, вам нужно перегрузить '+' для этого. –