Hello,
You define a 2nd version of Scale with the dots argument but do not use it.
Scale2 <- function(x, method=c("mean", "median"),...) {
scl <- match.fun(method)
scl(x, ...) # Here!
}
Scale2(ex, method=median, na.rm=TRUE) # both return
Scale2(ex, method="median", na.rm=TRUE) # the median
You could also use 'na.rm = TRUE' instead of '...', since both mean and
median use it. Anyway, if you define a function with certain arguments,
do try to use them in the function body. :)
As for the method argument, when the default value is a vector, it's
primary use is to check that one of those vector values and _only_ one
of those is passed to the function. More or less like this.
Scale3 <- function(x, method=c("mean", "median"),...) {
method <- match.arg(method)
scl <- match.fun(method)
scl(x, ...)
}
Scale3(ex, method=median, na.rm=TRUE) # Error
Scale3(ex, method="median", na.rm=TRUE) # Right
Scale3(ex, method="var", na.rm=TRUE) # Other type of error
Hope this helps,
Rui Barradas
Em 26-09-2012 16:56, K. Brand escreveu:
Esteemed R UseRs,
Regarding specifying arguments in functions and calling functions
within functions:
## beginning ##
## some data
ex <- rnorm(10)
ex[5] <- NA
## example function
Scale <- function(x, method=c("mean", "median")) {
scl <- method
scl(x)
}
## both return NA
Scale(ex, method=median)
median(ex, na.rm=FALSE)
## both return the median
Scale(ex, method="median")
median(ex, na.rm=TRUE)
## 1. Why does the use of apostrophes have this effect when calling
## a fucntion within a function?
## 2. What's the canonical use of apostrophes in functions like the above:
## Scale <- function(x, method=c("mean", "median")) {....
## or
## Scale <- function(x, method=c(mean, median)) {....
## 3. How does one specify the arguments of a function being called
## within a function? i.e. i thought the use of '...' might work in
## the following but i was wrong.
## '...' has no apparent effect
Scale <- function(x, method=c("mean", "median"),...) {
scl <- method
scl(x)
}
## both return NA
Scale(ex, method=median, na.rm=TRUE)
Scale(ex, method=median, na.rm=FALSE)
## end ##
I failed to comprehend anything google returned when trying to
understand this myself. Greatly appreciate any thoughts &/or
examples on this.
Tia, Karl
______________________________________________
[email protected] 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.