2

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

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

bf 只是最佳拟合函数。我也试过这样:

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

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

4

4 回答 4

7

你可以用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 的附加请求:

您可以向函数添加属性以存储您想要的任何内容。您可以添加一个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)"
于 2012-08-16T12:29:03.920 回答
6

我理解您的问题的方式是,您希望获得函数的文本表示并将其保存到文件中。为此,您可以使用该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 上工作。

于 2012-08-16T12:09:53.097 回答
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如果您使用and ,则不会发生这种情况load

于 2012-08-17T06:42:03.693 回答
2

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

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

或者,您可以使用 dput

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

dget检索

bf_str <- dget("MyFun.R")
于 2012-08-16T12:05:11.270 回答