?typeof? is your friend here:
[1] "special"
so mc[[1]] is a symbol, and thus not a primitive.
- Lukas
On 28 Mar 2017, at 14:46, Michael Lawrence <lawrence.michael at gene.com>
There is a difference between the symbol and the function (primitive
or closure) to which it is bound.
This:
mc2 <- as.call(list(`[`,iris,2,"Species"))
Evaluates `[` to its value, in this case the primitive object, and the
primitive itself is incorporated into the returned call.
If you were to do this:
mc2 <- as.call(list(quote(`[`),iris,2,"Species"))
The `[` would _not_ be evaluated, quote() would return the symbol, and
the symbol would end up in the call.
The two forms have virtually identical behavior as long as the call
ends up getting evaluated in the same environment.
On Tue, Mar 28, 2017 at 3:03 AM, Joris Meys <jorismeys at gmail.com> wrote:
subset-inheritance-with-additional-arguments
While going through callNextMethod, I've noticed the following odd
behaviour:
mc <- call("[",iris,2,"Species")
mc[[1]]
## `[`
is.primitive(`[`)
## [1] TRUE
is.primitive(mc[[1]])
## [1] FALSE
# Expected to be TRUE
mc2 <- as.call(list(`[`,iris,2,"Species"))
is.primitive(mc2[[1]])
## [1] TRUE
So depending on how I construct the call (using call() or as.call() ),
function `[` is or is not recognized as a primitive by is.primitive()
The behaviour is counterintuitive and -unless I miss something obvious
here- likely to be a bug imho. I immediately admit that my C chops
sufficient to come up with a patch.
Cheers
Joris
--
Joris Meys
Statistical consultant
Ghent University
Faculty of Bioscience Engineering
Department of Mathematical Modelling, Statistics and Bio-Informatics
tel : +32 (0)9 264 61 79
Joris.Meys at Ugent.be
-------------------------------
Disclaimer : http://helpdesk.ugent.be/e-maildisclaimer.php
[[alternative HTML version deleted]]