[R] Function for Data Frame

Ben Tupper btupper at bigelow.org
Mon Apr 29 18:23:08 CEST 2013


On Apr 29, 2013, at 10:23 AM, Sparks, John James wrote:

> Dear R Helpers,
> I have about 20 data frames that I need to do a series of data scrubbing
> steps to.  I have the list of data frames in a list so that I can use
> lapply.  I am trying to build a function that will do the data scrubbing
> that I need.  However, I am new to functions and there is something
> fundamental that I am not understanding.  I use the return function at the
> end of the function and this completes the data processing specified in
> the function, but leaves the data frame that I want changed unaffected. 
> How do I get my function to apply its results to the data frame in
> question instead of simply displaying the results to the screen?
> Any helpful guidance would be most appreciated.
> --John Sparks
> x=as.data.frame(matrix(c(1,2,3,
>        1,2,3,
>        1,2,2,
>        1,2,2,
>       1,1,1),ncol=3,byrow=T))
> myfunc<-function(DF){
> DF<-subset(DF,select=-c(V1))
> return(DF)
> }
> myfunc(x)
> #How to get this change to data frame x?
> #And preferrably not send the results to the screen?
> x

Good question!  In your example, x is passed into myfunc by value (a copy of the value of x) rather than by reference (like passing in the social security number of x).  So your scrubbing within the function is done on a copy of x, which you call DF. To update the value of x outside of your function, you have to assign the returned value of myfunc to x

x <- myfunc(x)

See more at ... http://cran.r-project.org/doc/manuals/r-release/R-intro.html#Writing-your-own-functions


> ______________________________________________
> 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.

Ben Tupper
Bigelow Laboratory for Ocean Sciences
60 Bigelow Drive, P.O. Box 380
East Boothbay, Maine 04544

More information about the R-help mailing list