parenthesis for R function -
i reading hadley wickham's book "advanced r" , came across following code.
`(` <- function(e1) { if (is.numeric(e1) && runif(1) < 0.1) { e1 + 1 } else { e1 } }
i follwing output when running function
> (1) [1] 1 > (1) [1] 2
q: why (1) run above function rather ((1) ?
i tried below,
f <- function(e1){if (is.numeric(e1) && runif(1) < 0.1) { e1 + 1 } else { e1 } } > f(1) [1] 2 > f1) error: unexpected ')' in "f1)"
you can check definition of (
in r:
> `(` .primitive("(")
now construct function (
in global environment (that's hadley if run code @ console). when r looks function, uses search path starts in global environment. hence first finds function definition of hadley. why keeps working.
the second part of explanation r interpreter itself. if sees symbol (
(but [
or +
or other special operator) looks function name , "rearranges" arguments. example, a + b
"rearranged" as:
call `+` first argument , second argument b
and (anexpression)
"rearranged" as"
call `(` anexpression argument
but afun(alistofarguments)
interpreted as:
call afun alistofarguments list of arguments
in case (
not function rather part of syntax calling function. 2 different things.
so ((1)
or f1)
can't work,
`(`(1)
does. because when r interpreter sees (
automatically looks closing )
complete syntax, when sees
`(`
it knows you're refering function named (
.
disclaimer: explanation conceptual, technical details of r interpreter bit more complex.
Comments
Post a Comment