Zmodyfikuj obiekt S3 bez zwracania go?

Jestem nowym użytkownikiem programowania zorientowanego obiektowo w R i zmagam się z tym, jak poprawnie napisać funkcję, która modyfikuje obiekt.

Ten przykład działa:

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)

Ale przypuszczam, że powinien być czystszy sposób na wykonanie tego bez zwracania całego obiektu:

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

Jaki jest właściwy sposób pisania funkcji modyfikujących w R? „<< -”?

Aktualizacja: Dziękuję wszystkim za to, co stało się Kamieniem Rosetty dla OOP w R. Bardzo pouczające. Problem, który próbuję rozwiązać, jest bardzo złożony pod względem przepływu, więc sztywność klas odniesienia może pomóc strukturze. Chciałbym zaakceptować wszystkie odpowiedzi jako odpowiedzi, a nie tylko jedną.

questionAnswers(4)

yourAnswerToTheQuestion