title: substitute() in S4
body: <p>If only the named arguments of a S4 generic function are defined in a method, <code>substitute()</code> works as expected:</p>
  
  <pre><code>&gt; setGeneric("fS4", function(x, ...) standardGeneric("fS4"))
  &gt; setMethod("fS4", signature("numeric"),
  +     function(x, ...) deparse(substitute(x))
  + )
  [1] "fS4"
  &gt; fS4(iris[,1])
  [1] "iris[, 1]"
  </code></pre>
  
  <p>However, if one adds an extra named argument to the method's definition, <code>substitute()</code> ceases to correctly return the argument as it was passed:</p>
  
  <pre><code>&gt; setMethod("fS4", signature("numeric"),
  +     function(x, y, ...) deparse(substitute(x))
  + )
  [1] "fS4"
  &gt; fS4(iris[,1])
  [1] "x"
  </code></pre>
  
  <p>Any clues on why this happens and, most importantly, how it can be worked around?</p>