[R] Using '[' as a function

Duncan Murdoch murdoch.duncan at gmail.com
Fri Jul 30 01:46:10 CEST 2010


On 29/07/2010 6:18 PM, chipmaney wrote:
> I am learning R, and instead of learning by rote, I am trying to better
> understand the language in order to improve my programming. So any
> "meta-information" on why the following code works would be greatly
> appreciated...
> 
> I obtained this code to extract the first record from each of a series of
> vectors in a list:
> 
>> example<- list(c(1,2),c(3,4),c(4,5))
> 
> [[1]]
> [1] 1 2
> 
> [[2]]
> [1] 3 4
> 
> [[3]]
> [1] 4 5
> 
>> sapply(example,'[',1)
> 
> [1] 1 3 4
> 
> however, after perusing my book and the interweb, i remain puzzled about how
> '[' works as a function in sapply. 
> 
> -Why does R recognize '[' as a function?  

Because it is a function.

> -Why does it need the quotes?

Because sapply(example,[,1) would not be syntactically valid.

> - How does the function know to use the optional(?) argument "1" as the
> index location?

Its definition is available by typing

`[`

and that shows it to be

.Primitive("[")

Primitive functions are all handled specially by the R evaluator.  In 
this case, you can look at the man page ?"[" which shows a variety of 
different argument signatures that are possible.  R will pass all 
optional arguments to the function, which will then (in special case 
code, because it's a primitive) will figure out which one of those 
syntax patterns is what the user intended.


> - Any other information linking this specific example to the broader R
> environment?

Primitive functions aren't the best place to start in understanding R, 
because by definition, they're all special cases.  I'd suggest writing 
your own functions with a variety of argument signatures and passing 
them to sapply to see what happens.

Duncan Murdoch


> 
> Any explanation of how this function works will be a small incremental gain
> in my understanding of R, so thanks in advance.
> 
> Chipper
>



More information about the R-help mailing list