R中的共享工作空间?

7

有没有关于在R中共享工作空间和数据框的建议?我在一家初创公司工作,我们没有经验处理大型生产环境中多个员工使用相同数据的情况。

是否有方法设置数据框的权限并共享它们?或者像MySQL这样的数据库只需按案例下载数据帧,我们这种情况的机构就是这样存储他们的数据吗?

有经验的人在这方面提供任何提示都将不胜感激!

谢谢!


请查看RMySQL包以实现无缝数据库访问。对我来说,这似乎是更好的解决方案,因为数据库将为您管理文件锁等。 - Ari B. Friedman
@gsk3 是的,这正是我最初考虑的,但我很想知道是否有更内置的方法来实现这一点。或者只是了解其他组织在这种情况下做些什么。谢谢! - Jeff Erickson
还有很多其他可能性。如果必须使用SQL,可以通过名为DBI的通用接口来支持;附带R的数据导入/导出手册中也有相关内容。此外,还有许多NoSQL解决方案,或者像我展示的那样,直接转储二进制数据的方法。 - Dirk Eddelbuettel
我不确定你的数据有多大,但我曾经使用Dropbox成功地在同事之间共享.Rdata文件。 - Brandon Bertelsen
1
如果你使用Dropbox进行共享,那么你们两个不就在同一个文件上工作吗?最终Dropbox会同步并覆盖用户的更改。可以来回复制文件,但不要在同一个文件上工作。这是失败的做法。 - Spacedman
3个回答

8
一种方法是通过save()将变量转储到共享位置,然后通过load()读取这些变量--它具有压缩和二进制模式下快速读写操作的额外优势。
当然,您也可以序列化到文件或数据库。或者,如果必须,甚至可以序列化为可读性文件,但这些文件读取速度最慢。 编辑 根据评论,以下是如何在保存后更改文件模式的方法:
R> foo <- 1:3
R> save(foo, file="/tmp/SimpleDemo.RData")
R> Sys.chmod("/tmp/SimpleDemo.RData", mode="0444")
R> system("ls -l /tmp/SimpleDemo.RData")
-r--r--r-- 1 edd edd 62 2011-08-15 16:26 /tmp/SimpleDemo.RData

谢谢。有没有已知的方法可以将它们设置为只读,以确保在加载后它们没有被更改? - Jeff Erickson
1
什么操作系统?如果你正在使用成熟的系统,你可以在创建文件后移除写入权限。 - Dirk Eddelbuettel
使用OSX,但我想从R中删除写入权限。不确定是否可能。 - Jeff Erickson
2
看看我的最新编辑。然后执行 install(fortunes); fortunes::fortune("Yoda") 来确保一切 :) - Dirk Eddelbuettel

7
您可以考虑使用stashR来创建一个小型服务器,用于保存工作数据集。它比挂起文件更方便,比反复查询SQL更直接。

至于存储结果,更好的选择是存储可以生成结果的脚本(所谓的可重复研究),并使用版本控制系统进行管理。当然,在进行大量计算时,这会变得很麻烦,但是可以考虑一些自动系统,以响应某些版本控制系统的更改,并填充一些中间结果的基础。


1

使用save()和load()是最好的方法。我还使用source()来加载库,以确保在load()时正确解释使用save()存储的对象。

我喜欢创建所有对象并将它们保存起来,在后续会话中重复使用它们。但是,例如,如果我保存了一个xts时间序列对象,在重新加载时,其元结构将无法正确识别,直到我执行library(xts)。

要查看这个问题,您可以运行

str(xts1) #(xts1 is your xts object) 

在加载xts库之前和之后。

因此,可以保存()和共享各种对象,但应记住在开始重用之前加载相关的库/定义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接