在会话之间保存包设置

Das*_*son 10 r package

是否有确定的方法来保存会话之间某个包的选项或信息?

例如,有人制作游戏并将其作为R包发布.如果他们想要保存高分并且每次R开始新会话时没有重置它们,那么最好的方法是什么?目前我只能想到将文件存储在用户主目录中,但我不确定我是否喜欢这种方法.

Tyl*_*ker 4

这或许是一种做法。我创建了一个虚拟包,其中包含一个虚拟函数(我创建的任何函数都必然是一个虚拟函数)和一个我调用的数据集,scores设置如下:

scores <- NA
Run Code Online (Sandbox Code Playgroud)

然后我使用分数数据集创建了包。

然后我使用以下命令从 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"))
Run Code Online (Sandbox Code Playgroud)

然后,当我卸载库并重新加载时,数据集现在显示:

> scores
[1] 10
Run Code Online (Sandbox Code Playgroud)

可以修改它来做你想要的吗?您必须以某种方式将其保存起来,但不确定如何在不影响.Last功能的情况下做到这一点。

编辑:

看来此选项不可行,因为当您编译为包并使用延迟加载时,它将数据集保存为:

RData.rbd、RData.rbx,不是 .rda 文件。这意味着我上面使用的方法有点毫无价值,因为我们希望它自动被识别。

EDIT2 这种方法有效,我在我制作的包上尝试过。您无法延迟加载数据,并且必须显式使用或在您调用的函数内部data(scores)使用。data(scores)我还在第一次创建 int global.env 时将其分配scores给它并在函数内部使用以查看它是否存在。如果`.scores。存在我将其分配给函数内的分数。一旦你卸载了库并再次加载,你就再也不用担心这个问题了。.scoresexists

也许另一种选择是以某种方式将其保存为一个函数,可以使用 Josh 的建议进行更改:永久替换函数

  • 您可以在修改“分数”时随时重新保存它(假设这种情况并不经常发生)。那么你就不必担心“最后”保存它 (3认同)