Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | 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 in seq_along(funs)) { cat( # number the function we are about to add paste("\n" , "#------ Function number ", i , "-----------------------------------" ,"\n"), append = T, file = file ) cat( # print the function into the file paste(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 it paste("# 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 |
Update: Joshua Ulrich gave on stackoverflow another solution for this challenge:
newEnv <- new.env() load("myFunctions.Rdata", newEnv) dump(c(lsf.str(newEnv)), file="normalCodeFile.R", envir=newEnv)
And also suggested to look into ?prompt (which creates documentation files for objects) and / or ?package.skeleton.
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.