首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将R对象(代码)保存在.R文件中(R genetic programming)

将R对象(代码)保存在.R文件中(R genetic programming)
EN

Stack Overflow用户
提问于 2012-08-16 19:57:43
回答 4查看 12.5K关注 0票数 2

环境创建了解决问题的函数。我尝试过的一种方法是:

代码语言:javascript
复制
bf_str = print(bf)
save(bf_str,file="MyBestFunction.R"))

bf就是最好的拟合函数。我也是这样试过的:

代码语言:javascript
复制
save(bf,file="MyBestFunction.R"))

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-08-16 20:09:53

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

代码语言:javascript
复制
sink(file="MyBestFunction.R")
bf_str
sink()

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

编辑:

要在文件末尾追加注释,可以执行以下操作:

代码语言:javascript
复制
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上运行。

票数 6
EN

Stack Overflow用户

发布于 2012-08-16 20:29:04

您可以使用dump来实现这一点。它将保存分配和定义,以便您稍后可以source它。

代码语言:javascript
复制
R> f <- function(x) x*2
R> dump("f")
R> rm(f)
R> source("dumpdata.R")
R> f
function(x) x*2

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

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

代码语言:javascript
复制
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)"
票数 7
EN

Stack Overflow用户

发布于 2012-08-17 14:42:04

虽然这个问题已经得到了回答,但我应该提一下dump有一些缺陷,我想你最好通过save以二进制格式保存你的函数。

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

代码语言:javascript
复制
e <- new.env()
e$x <- 10
f <- function(y) y + x
environment(f) <- e

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11986574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档