I\'m using R for genetic programming with the RGP package. The environment creates functions that solve problems. I want to save these functions in their own .R source files. I
The way I understand your question, you'd like to get a text representation of the functions and save that to a file. To do that, you can divert the output of the R console using the sink
function.
sink(file="MyBestFunction.R")
bf_str
sink()
Then you can source
the file or open it using R or another program via your OS.
EDIT:
To append a comment to the end of the file, you could do the following:
theScore <- .876
sink(file = "MyBestFunction.R", append = TRUE)
cat("# This was a great function with a score of", theScore, "\r\n")
sink()
Depending on your setup, you might need to change \r\n
to reflect the appropriate end of line characters. This should work on DOS/Windows at least.
You can pass save
the names of objects to be saved via the list
argument
save(list="bf_str", file="MyBestFunction.R")
Alternatively, you could use dput
dput(bf_str, file='MyFun.R')
and dget
to retrieve
bf_str <- dget("MyFun.R")
You can use dump
for this. It will save the assignment and the definition so you can source
it later.
R> f <- function(x) x*2
R> dump("f")
R> rm(f)
R> source("dumpdata.R")
R> f
function(x) x*2
Update to respond to the OP's additional request in the comments of another answer:
You can add attributes to your function to store whatever you want. You could add a score
attribute:
R> f <- function(x) x*2
R> attr(f, 'score') <- 0.876
R> dump("f")
R> rm(f)
R> source("dumpdata.R")
R> f
function(x) x*2
attr(,"score")
[1] 0.876
R> readLines("dumpdata.R")
[1] "f <-"
[2] "structure(function(x) x*2, score = 0.876)"
While the question has already been answered, I should mention that dump
has some pitfalls and IMO you would be better off saving your function in binary format via save
.
In particular, dump
only saves the function code itself, not any associated environment. This may not be a problem here, but could bite you at some point. For example, suppose we have
e <- new.env()
e$x <- 10
f <- function(y) y + x
environment(f) <- e
Then dump("f")
will only save the function definition of f
, and not its environment. If you then source
the resulting file, f
will no longer work correctly. This doesn't happen if you use save
and load
.