セッション間で特定のパッケージに関連するオプションまたは情報を保存する決定的な方法はありますか?
たとえば、誰かがゲームを作成し、R パッケージとしてリリースしたとします。ハイスコアを保存し、R が新しいセッションを開始するたびにハイスコアをリセットしたくない場合、これを行う最善の方法は何でしょうか? 現在、ユーザーのホームディレクトリにファイルを保存することしか考えられませんが、そのアプローチが好きかどうかはわかりません。
これはアプローチかもしれません。ダミー関数 (作成した関数はすべてダミー関数にバインドされます) と、scores
次のように設定した呼び出したデータ セットを含むダミー パッケージを作成しました。
scores <- NA
次に、スコア データ セットを含むパッケージを作成しました。
次に、次を使用して、R 内からデータ セットを変更しました。
loc <- paste0(find.package("new"), "/Data")
unlink(paste0(loc, "/scores.rda"), recursive = TRUE, force = FALSE)
scores <- 10
save(scores, file=paste0(loc, "/scores.rda"))
次に、ライブラリをアンロードして再ロードすると、データセットは次のようになります。
> scores
[1] 10
あなたが望むようにこれを変更できますか?何らかの方法で保存する必要がありますが、機能をいじらずにこれを行う方法がわかりません.Last
。
編集:
このオプションは、パッケージとしてコンパイルして遅延読み込みを使用すると、データセットが次のように保存されるという点で実行可能ではないようです。
.rda ファイルとしてではなく、RData.rbd、RData.rbx。つまり、上記で使用したアプローチは、自動的に認識されるようにするという点で、あまり役に立たないということです。
EDIT2
このアプローチは機能し、作成したパッケージで試しました。データの遅延読み込みを行うことはできず、呼び出している関数内で明示的に使用するdata(scores)
か、内部で使用する必要があります。また、最初に作成されたときにint he global.env にdata(scores)
割り当て、関数内で使用して存在するかどうかを確認しました。`.scores. 私はそれを関数内のスコアに割り当てました。ライブラリをアンロードしてロードし直せば、もう心配する必要はありません。scores
.scores
exists
たぶん、別の方法として、これを何らかの方法で関数として保存し、ジョシュのアドバイスを使用して変更することもできます:関数を永久に置き換える
何らかの方法でディスクまたはデータベースに保存せずに設定を保存する方法はないと思います。以下のコードを~/.Rprofile
. ただし、使用以外の方法で設定を保存するパッケージがある場合は、options
手動で追加する必要があります。
これがまさにあなたが望んでいないと言ったことであることは知っていますが、少なくともいくつかの議論を引き起こす可能性があります.
.Last <- function(){
my.options <- options()
save(my.options, file="~/.Roptions.Rdata")
}
.First <- function(){
tryCatch({
load("~/.Roptions.Rdata")
do.call(options, my.options)
rm(my.options)
}, error=function(...){})
}
驚いたことに、存在しないtry(..., silent=TRUE)
場合は起動時に警告が表示されるため、代わりに使用しました。~/.Roptions.Rdata
tryCatch