Modificar objeto S3 sem retorná-lo?

Eu sou novo na programação orientada a objetos em R e luto com a maneira correta de escrever uma função que modifica um objeto.

Este exemplo funciona:

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)

Mas suponho que deveria haver uma maneira mais limpa de fazer isso sem retornar o objeto inteiro:

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

Qual é a maneira correta de escrever funções de modificação em R? "<< -"?

Atualização: Obrigado a todos pelo que se tornou uma Pedra de Roseta para a OOP em R. Muito informativo. O problema que estou tentando resolver é muito complexo em termos de fluxo, portanto, a rigidez das classes de referência pode trazer a estrutura para ajudar. Eu gostaria de poder aceitar todas as respostas como respostas e não apenas uma.

questionAnswers(4)

yourAnswerToTheQuestion