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


______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to