我正在使用 R 与 RGP 包进行基因编程。环境创造了解决问题的功能。我想将这些函数保存在他们自己的 .R 源文件中。我无法为我的生活弄清楚如何。我尝试过的一种方法是:
bf_str = print(bf)
save(bf_str,file="MyBestFunction.R"))
bf 只是最佳拟合函数。我也试过这样:
save(bf,file="MyBestFunction.R"))
输出的文件非常奇怪。它只是一群疯狂的角色
我正在使用 R 与 RGP 包进行基因编程。环境创造了解决问题的功能。我想将这些函数保存在他们自己的 .R 源文件中。我无法为我的生活弄清楚如何。我尝试过的一种方法是:
bf_str = print(bf)
save(bf_str,file="MyBestFunction.R"))
bf 只是最佳拟合函数。我也试过这样:
save(bf,file="MyBestFunction.R"))
输出的文件非常奇怪。它只是一群疯狂的角色
你可以用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)"
我理解您的问题的方式是,您希望获得函数的文本表示并将其保存到文件中。为此,您可以使用该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 上工作。
虽然这个问题已经得到解答,但我应该提到它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
。
您可以通过参数传递save
要保存的对象的名称list
save(list="bf_str", file="MyBestFunction.R")
或者,您可以使用 dput
dput(bf_str, file='MyFun.R')
并dget
检索
bf_str <- dget("MyFun.R")