【问题标题】:Saving R objects (code) in .R files (R genetic programming)将 R 对象(代码)保存在 .R 文件中(R 基因编程)
【发布时间】:2012-08-16 11:57:43
【问题描述】:

我在 RGP 包中使用 R 进行基因编程。环境创造了解决问题的功能。我想将这些函数保存在他们自己的 .R 源文件中。我无法为我的生活弄清楚如何。我尝试过的一种方法是:

bf_str = print(bf)
save(bf_str,file="MyBestFunction.R"))

bf 是最适合的函数。我也试过这样:

save(bf,file="MyBestFunction.R"))

输出的文件非常奇怪。它只是一群疯狂的角色

【问题讨论】:

标签: r


【解决方案1】:

您可以为此使用dump。它将保存分配和定义,以便您以后可以source。

R> f <- function(x) x*2
R> dump("f")
R> rm(f)
R> source("dumpdata.R")
R> f
function(x) x*2

更新以响应 OP 在另一个答案的 cmets 中的附加请求:

您可以向函数添加属性以存储您想要的任何内容。你可以添加一个score 属性:

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)"

【讨论】:

  • 好多了。保留任务。更短。
【解决方案2】:

按照我理解您的问题的方式,您希望获得函数的文本表示并将其保存到文件中。为此,您可以使用 sink 函数转移 R 控制台的输出。

sink(file="MyBestFunction.R")
bf_str
sink()

然后您可以source 文件或通过您的操作系统使用 R 或其他程序打开它。

编辑:

要将注释附加到文件末尾,您可以执行以下操作:

theScore <- .876

sink(file = "MyBestFunction.R", append = TRUE)
cat("# This was a great function with a score of", theScore, "\r\n")
sink()

根据您的设置,您可能需要更改 \r\n 以反映适当的行尾字符。这至少应该适用于 DOS/Windows。

【讨论】:

  • 啊。这不是我阅读问题的方式,但我敢打赌你是对的。
  • @GSee,“只是一堆疯狂的字符”部分表明,也许纯文本是目标。但我们会看到...
  • 选项 1 有效,但这看起来也不错。我想要一种在评论中输出文件中更多文本的方法,特别是它的分数......谢谢
  • @ZekeAlexandreNierenberg,有几种方法可以在文件中包含 cmets。一种方法被添加为上面的编辑。如果这不是您想要的,那么包含一个小的工作示例可能会有所帮助。
  • @ZekeAlexandreNierenberg:您应该在问题中添加额外的要求。它会给其他人一个回应的机会,而不仅仅是你评论的一个答案。我已针对您对我的回答的额外要求添加了解决方案。
【解决方案3】:

虽然问题已经得到解答,但我应该提到dump 有一些陷阱,IMO 你最好通过save 以二进制格式保存你的函数。

特别是,dump 只保存函数代码本身,不任何关联的环境。这在这里可能不是问题,但可能会在某些时候咬你。例如,假设我们有

e <- new.env()
e$x <- 10
f <- function(y) y + x
environment(f) <- e

那么dump("f")只会保存f的函数定义,不会保存它的环境。如果您随后 source 生成的文件,f 将不再正常工作。如果您使用 save 和 load,则不会发生这种情况。

【讨论】:

    【解决方案4】:

    您可以通过list 参数将要保存的对象的名称传递给save

    save(list="bf_str", file="MyBestFunction.R")
    

    或者,您可以使用 dput

    dput(bf_str, file='MyFun.R')
    

    和dget 检索

    bf_str <- dget("MyFun.R")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-27
      • 2014-02-10
      • 1970-01-01
      • 2021-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多