title: Is there a reason to prefer extractor functions to accessing attributes with $?
body: <p>On a <a href="https://stats.stackexchange.com/questions/65356/how-to-attach-coefficient-from-vgam-package-generalized-poisson-regression">thread</a> on CrossValidated, I made the following comment:  </p>
  
  <blockquote>
    <p>I suspect this is actually an R question about the difference between
    working with <code>S3</code> classes (that are accessed via <code>$</code>) &amp; <code>S4</code> classes (that
    are accessed via <code>@</code>)...  </p>
  </blockquote>
  
  <p>@Gavin Simpson subsequently commented:  </p>
  
  <blockquote>
    <p>@gung is more than likely spot on, but the solution is probably <strong>not</strong> to
    delve into objects and rip out whatever you feel but to learn to use
    extractor functions, in this case <code>coefficients()</code> or its shorter alias
    <code>coef()</code>, as in <code>coef(fit)</code>  </p>
  </blockquote>
  
  <p>I'm intrigued by this.  <strong>Why would using</strong> <code>coef(model)</code> <strong>be better than</strong> <code>model$coefficients[,1]</code><strong>, for example?</strong>  (I recognize that the latter is uglier and requires slightly more typing, but I doubt that's the reason intended.)  What about the case where there isn't an existing extractor function (e.g., accessing the t-statistics)?  </p>