Изменить объект S3, не возвращая его?

Я новичок в объектно-ориентированном программировании на R и борюсь с тем, как правильно написать функцию, которая модифицирует объект.

Этот пример работает:

store1 <- list(
  apples=3,
  pears=4,
  fruits=7
)
class(store1) <- "fruitstore"
print.fruitstore <- function(x) {
  paste(x$apples, "apples and", x$pears, "pears", sep=" ")
}
print(store1)
addApples <- function(x, i) {
x$apples <- x$apples + i
x$fruits <- x$apples + x$pears
return(x)
}
store1 <- addApples(store1, 5)
print(store1)

Но я предполагаю, что должен быть более чистый способ сделать это, не возвращая весь объект:

addApples(store1, 5)  # Preferable line...
store1 <- addApples(store1, 5)  # ...instead of this line

Как правильно написать модифицирующие функции в R? "<< -"?

Обновление: Спасибо всем за то, что стал Rosetta Stone для ООП в R. Очень информативно. Проблема, которую я пытаюсь решить, очень сложна с точки зрения последовательности действий, поэтому жесткость ссылочных классов может помочь структуре. Я хотел бы принять все ответы в качестве ответов, а не только один.

Ответы на вопрос(4)

Ваш ответ на вопрос