[R] function

Douglas Bates bates at stat.wisc.edu
Thu Nov 9 19:09:16 CET 2006


On 11/9/06, Bill Hunsicker <BHunsicker at rfmd.com> wrote:

> I am trying to create a function that i pass a data set to and have the
> function return some calculations based on data.
>
> Allow me to illustrate:
>
> myfunc <- function(lst,mn,sd){
>    lst <- sort(lst)
>    mn <- mean(lst)
>    sd <- sqrt(var(lst))
>    return(lst,mn,sd)
> }
>
> data1 <-c (1,2,3,4,5)
> data2 <- c(6,7,8,9,10)
> myfunc(data1,data1mn,data1sd)
> myfunc(data2,data2mn,data2sd)
>
> This snippet errors that data1mn not find and warns that return is
> deprecating!!!!!!!!!!!
>
> Can you help me?

It is the returning a vector of arguments without wrapping them as a
list that is deprecated.

You do not need to pass values to be returned as arguments to the function.

The simplest way of modifying your function is

myfunc <- function(dat)
{
   mn <- mean(dat)
   stddev <- sd(dat)
   list(data = dat, mean = mn, sd = stddev)
}

You could even make it into a one-liner as

myfunc <- function(dat) list(data = dat, mean = mean(dat), sd = sd(dat))

but it would be better R programming style to do some checking on the
argument 'dat' before trying to apply the mean and sd functions to it.



More information about the R-help mailing list