I am trying to write a function that will have an input of a vector of functions. Here is a simplistic example. sumstats <- c(mean,sd) sumstats[1] #Gives this error #> sumstats[1] #[[1]] #function (x, ...) #UseMethod("mean") #<environment: namespace:base> I thought about restricting the input to character variables such as the following sumstats2 <- c("mean","sd") Is there a way to change "mean" to the function mean? -- View this message in context: http://www.nabble.com/Reading-Functions-that-are-in-a-Vector-tp25639720p25639720.html Sent from the R help mailing list archive at Nabble.com.
On Sun, Sep 27, 2009 at 10:36 PM, trumpetsaz <stephaniezimmer at gmail.com> wrote:> > I am trying to write a function that will have an input of a vector of > functions. Here is a simplistic example. > sumstats <- c(mean,sd) > sumstats[1] > #Gives this error > #> sumstats[1] > #[[1]] > #function (x, ...) > #UseMethod("mean") > #<environment: namespace:base>That's not an error. The code asked it to return the first function so that's what it did.> > I thought about restricting the input to character variables such as the > following > sumstats2 <- c("mean","sd") > Is there a way to change "mean" to the function mean?This gives a vector of functions given a vector of their names: sumstat1 <- lapply(sumstats2, get)
On 28/09/2009, at 3:36 PM, trumpetsaz wrote:> > I am trying to write a function that will have an input of a vector of > functions. Here is a simplistic example. > sumstats <- c(mean,sd) > sumstats[1] > #Gives this error > #> sumstats[1] > #[[1]] > #function (x, ...) > #UseMethod("mean") > #<environment: namespace:base> > > I thought about restricting the input to character variables such > as the > following > sumstats2 <- c("mean","sd") > Is there a way to change "mean" to the function mean?You *can't* have a vector of functions, as far I know. The entries of a vector must be (numeric, character, or logical) scalars. You *can* have a *list* of functions; this might be the way you want to go. To ``change "mean" to the function mean'' --- set ?get. cheers, Rolf Turner ###################################################################### Attention:\ This e-mail message is privileged and confid...{{dropped:9}}
Hi, You said,>sumstats <- c(mean,sd) >sumstats[1] >#Gives this errorbut this is not an error! You created a list that contains two functions, and sumstats[1] simply prints the first one. HTH, baptiste
Also, have a look at each() in the plyr package, library(plyr) each(length, mean, var)(rnorm(100)) baptiste 2009/9/28 trumpetsaz <stephaniezimmer at gmail.com>:> > I am trying to write a function that will have an input of a vector of > functions. Here is a simplistic example. > sumstats <- c(mean,sd) > sumstats[1] > #Gives this error > #> sumstats[1] > #[[1]] > #function (x, ...) > #UseMethod("mean") > #<environment: namespace:base> > > I thought about restricting the input to character variables such as the > following > sumstats2 <- c("mean","sd") > Is there a way to change "mean" to the function mean? > -- > View this message in context: http://www.nabble.com/Reading-Functions-that-are-in-a-Vector-tp25639720p25639720.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > R-help at 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. >