My opinion is that you should use S3 unless you absolutely need some syntactic 
sugar only offered by some other object system.

Note that in a majority of cases you want to transform one standard data 
structure to another... tibble to tibble is the fashion for dplyr... and 
functions can often do what you want just fine except that they sometimes end 
up needing a lot of arguments that you want to refer to in many places. You can 
often make a class that holds those arguments so they can be re-used and where 
the class has methods to do the desired transformation (s) where the bulk data 
remains handled as arguments and return values rather than as data in the 
object itself.

The lm class in base R uses a "constructor computes and methods retrieve 
results" approach... which isn't quite as flexible as a transformer approach 
but still hides the gory details.

My reason for giving these examples is that the functional/OO approach 
expresses problems quite cleanly using S3... and you don't have to pay the 
performance/hoop-jumping/extra dependencies that you need for R5 or R7. That 
is, you should think carefully about whether you really need whatever features 
that more advanced OO system offers... and then you will know the answer to the 
question you posed for yourself.

On April 7, 2025 10:35:44 AM PDT, Erin Hodgess <erinm.hodg...@gmail.com> wrote:
>Hello everyone!
>
>I have an opinion question please.  If I’m writing a new package, would you
>recommend using S3 or S4 structure, please?
>
>I know I will get lots of opinions, but that’s fine.
>
>Thanks,
>Erin
>
>
>Erin Hodgess, PhD
>mailto: erinm.hodg...@gmail.com
>
>       [[alternative HTML version deleted]]
>
>______________________________________________
>R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
>https://stat.ethz.ch/mailman/listinfo/r-help
>PLEASE do read the posting guide https://www.R-project.org/posting-guide.html
>and provide commented, minimal, self-contained, reproducible code.

-- 
Sent from my phone. Please excuse my brevity.

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide https://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to