2

RGPパッケージで遺伝的プログラミングにRを使用しています。環境は、問題を解決する機能を生み出します。これらの関数を独自の .R ソース ファイルに保存したいと考えています。私は私の人生のために方法を理解することはできません。私が試した1つの方法はこれです:

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

私があなたの質問を理解している方法では、関数のテキスト表現を取得して、それをファイルに保存したいと考えています。これを行うには、関数を使用して R コンソールの出力を流用できsinkます。

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

次にsource、OS を介して 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と を使用すると、これは発生しません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 に答える