Saving R objects (code) in .R files (R genetic programming)

前端 未结 4 1838
囚心锁ツ
囚心锁ツ 2021-01-21 17:02

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

相关标签:
4条回答
  • 2021-01-21 17:23

    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.

    0 讨论(0)
  • 2021-01-21 17:29

    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")
    
    0 讨论(0)
  • 2021-01-21 17:33

    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)"
    
    0 讨论(0)
  • 2021-01-21 17:38

    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.

    0 讨论(0)
提交回复
热议问题