Dumping functions from the global environment into an R script file

Looking at a project you didn’t touch for years poses many challenges. The less documentation and organization you had in your files, the more time you’ll have to spend tracing back what you did back when the code was written.

I just opened up such a project, that was before I ever knew to split my .r files to “data.r”, “functions.r”, “do.r”. All I have are several versions of an old .RData file and many .r files with a mix of functions and commands (oh the shame!)

One idea I had for the tracing back was to take the latest version of .RData I had, and see what functions I had in it’s environment. simply typing ls() wouldn’t work. Also, I wanted to have a list of all the functions that where defined in my .RData environment. Thanks to the code recently published by Richie Cotton, I was able to create the “save.functions.from.env”. This function will go through all your defined functions and write them into “d:\\temp.r”.

I hope this might be useful to one of you in the future, here is the code to do it:

save.functions.from.env<-function(file="d:\\temp.r"){# This function will go through all your defined functions and write them into "d:\\temp.r"# let's get all the functions from the envoirnement:
funs <-Filter(is.function, sapply(ls(".GlobalEnv"), get))# Let's for(i inseq_along(funs)){cat(# number the function we are about to addpaste("\n" , "#------ Function number ", i , "-----------------------------------" ,"\n"),
append=T, file=file)cat(# print the function into the filepaste(names(funs)[i] , "<-", paste(capture.output(funs[[i]]), collapse ="\n"), collapse ="\n"),
append=T, file=file)cat(paste("\n" , "#-----------------------------------------" ,"\n"),
append=T, file=file)}cat(# writing at the end of the file how many new functions where added to itpaste("# A total of ", length(funs), " Functions where written into", file),
append=T, file=file)print(paste("A total of ", length(funs), " Functions where written into", file))}# save.functions.from.env() # this is how you run it