From jorismeys at gmail.com  Tue Mar 28 15:19:14 2017
From: jorismeys at gmail.com (Joris Meys)
Date: Tue, 28 Mar 2017 15:19:14 +0200
Subject: [Rd] `[` not recognized as a primitive in certain cases.
In-Reply-To: <26E86B1F-1BF0-4DDF-BAA9-CA03FCDE573D@oracle.com>
References: <CAO1zAVYLbF9fo8VxO8NKVYvS2yr=GDa3YrO+se8y5bq4QFUr4A@mail.gmail.com>
	<CAOQ5NyfDoxZ-8Ga+WfHSBqnutsvN+=FNYJxgGM1hfNWn3UkWwQ@mail.gmail.com>
	<26E86B1F-1BF0-4DDF-BAA9-CA03FCDE573D@oracle.com>
Message-ID: <CAO1zAVYGB=TbsRcd8LAm-Y5wsgCaJ1ofFs4oStimKmRyhtzcag@mail.gmail.com>

Thank you gents, I overlooked the subtle differences.

On Tue, Mar 28, 2017 at 2:49 PM, Lukas Stadler <lukas.stadler at oracle.com>
wrote:

> ?typeof? is your friend here:
>
> > typeof(`[`)
> [1] "special"
> > typeof(mc[[1]])
> [1] "symbol"
> > typeof(mc2[[1]])
> [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>
> wrote:
> >
> > 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:
> >> Dear,
> >>
> >> I have noticed this problem while looking at the following question on
> >> Stackoverflow :
> >>
> >> http://stackoverflow.com/questions/42894213/s4-class-
> 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() ),
> the
> >> 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
> aren't
> >> 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]]
> >>
> >> ______________________________________________
> >> R-devel at r-project.org mailing list
> >> https://stat.ethz.ch/mailman/listinfo/r-devel
> >
> > ______________________________________________
> > R-devel at r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-devel
>
>


-- 
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]]



[Rd] `[` not recognized as a primitive in certain cases.
Joris Meys