2015-07-03 74 views
1

我必须如何直接在物理RData中使用data.frame?

1)负载从物理RDATA到存储器的data.frame,

2)进行修改,

3)保存回物理RDATA,

4)将其从内存中删除以避免冲突?

难道我可以跳过加载/保存步骤并直接对物理RData进行永久性更改吗?有没有像使用SQLite/MySQL数据库一样使用data.frame的方法?或者我应该使用SQLite/MySQL(而不是data.frame)作为数据存储?

更多的想法:我认为主要区别在于使用SQLite/MySQL与数据库建立连接,但要使用RData中的data.frame在内存中创建副本。后面的方法可能会在复杂的程序中产生冲突。为避免潜在的冲突,您必须保存data.frame,并在每次更改时立即将其从内存中移除。

谢谢!

+0

无论谁投票结束,你可以在做这些之前做一些有用的评论吗? – Jfly

+0

您是否正在尝试使用R或其他程序进行更改? – C8H10N4O2

+0

是的。使用R.但我发现它一贯的加载/保存是乏味的。 – Jfly

回答

3

而不是使用load你可能要考虑使用attach。这可以将保存的数据对象附加到搜索路径,而无需将其中的所有对象加载到全局环境中。数据框将可以使用。

如果您想更改数据框,那么您需要将其复制到全局环境(将自动进行大多数编辑),然后您需要再次保存它(不存在简单的保存方法它转换成包含其他对象的.Rdata文件)。

完成后,您可以使用detach(但是如果您在全局环境中创建了副本,那么您仍然需要删除该副本)。

如果你不喜欢打字load/save命令(或attach/detach)每一次,那么你可以编写自己的函数,所有的步骤也适用于你(如果复制仅在环境该功能,那么你不必担心删除它)。

您可能还想考虑存储数据的不同方式。典型的.Rdata文件适用于全或无的方法。 saveRDSreadRDS函数将保存并读取一个对象(并且在读入时不强制使用相同的名称)。与数据库方法的接口可能是最好的,如果你经常更改表格并希望它们存储在R之外。