R扩展写入本地数据

Posted

技术标签:

【中文标题】R扩展写入本地数据【英文标题】:R extension write local data 【发布时间】:2018-11-06 08:57:12 【问题描述】:

我正在创建一个包并希望在本地存储设置数据,因为它对于包的每个用户都是唯一的,因此不必在每次加载包时都设置设置。

我怎样才能以最好的方式做到这一点?

【问题讨论】:

【参考方案1】:

您可以将必要的数据保存在一个对象中并使用saveRDS() 保存它 每当它进行更改或用户离开或发出保存命令时。 它将 R 对象保存在指定路径中的文件名下。

saveRDS(<obj>, "path/to/filename.rds")

您可以在下次使用loadRDS() 启动包时加载它。 loadRDS() 的好处是您可以为 obj 分配一个新名称。 (因此您不必记住它的旧 obj 名称。但是,旧 obj 名称也会随对象一起加载,最终会污染您的命名空间。

newly.assigned.name <- loadRDS("path/to/filename.rds")
# or also possible:
loadRDS("path/to/filename.rds") # and use its old name

存放地点

Windows

也许here:

您可以使用 %systemdrive%%homepath% 环境变量来完成 这个。

连接时的两个命令变量为您提供所需的 用户主目录路径如下:

在命令提示符下运行 echo %systemdrive% 给出:

C:

在命令提示符下运行 echo %homepath% 会给出:

\用户\

当一起使用时,它变成:

C:\用户\

Linux/OsX

在用户的包位置,

path.to.package <- find.package("name.of.your.pacakge", 
                                lib.loc = NULL, quiet = FALSE,
                                 verbose = getOption("verbose"))
# and then construct with 
destination.folder.path <- file.path(path.to.package, 
                                     "subfoldername", "filename")`
# the path to the final destination
# You should use `file.path()` to construct such paths, because it detects automatically the correct ('/' or '\') separators for the file paths in Unix-derived systems (Linux/Mac Os X) versus Windows.

或者在文件中使用用户的 $HOME 变量 - 文件名以“.”开头- 这是 Unix 系统 (Linux/Mac OS X) 中用于保存软件程序配置的此类文件的约定。 例如“.your-packages-name.rds”。

如果有人有更好的解决方案,请帮忙!

【讨论】:

但是我应该使用哪个路径来保存文件?我不能使用工作目录,因为它可能会改变,我不知道将文件存储在磁盘上。它可能在 C 盘或其他东西上,我不知道要使用哪个文件夹。有没有我可以使用的特殊文件夹? 你的包在用户本地计算机上的路径。查看stat.ethz.ch/R-manual/R-devel/library/base/html/… - 使用此命令,您应该能够自动检测用户计算机中包的路径。您必须自动检测路径 - 因为并非所有用户都使用 Windows,但其他用户(如我)使用 linux,还有其他用户使用 Mac (Os X)。 希望用户没有将软件包安装在 mac 或 linux 的非主区域,而是本地安装在他的主目录中。否则 R 无权在那里写,除非他以 sudo 开头。 我将此部分添加到我的答案中。

以上是关于R扩展写入本地数据的主要内容,如果未能解决你的问题,请参考以下文章

将Sqlite数据写入Sqlserver

本地 SQLite 与远程 MongoDB

在 Elixir/Erlang 中的(本地)Mnesia 实例上实现最佳写入性能

使用 Express 从本地主机获取数据/将数据写入本地主机

从数据库读取并写入本地驱动器,大数据

Flutter 并将数据保存到本地存储