Nov*_*rog 13 load r save data.table
背景
我试图CSV用rds文件替换一些输出文件以提高效率.这些是中间文件,将作为其他R脚本的输入.
题
我开始调查我的脚本何时失败并发现readRDS()并且load()不会返回与data tables原始脚本相同的脚本.这应该发生吗?还是我错过了什么?
示例代码
library( data.table )
aDT <- data.table( a=1:10, b=LETTERS[1:10] )
saveRDS( aDT, file = "aDT.rds")
bDT <- readRDS( file = "aDT.rds" )
identical( aDT, bDT, ignore.environment = T ) # Gives 'False'
aDF <- data.frame( a=1:10, b=LETTERS[1:10] )
saveRDS( aDF, file = "aDF.rds")
bDF <- readRDS( file = "aDF.rds" )
identical( aDF, bDF, ignore.environment = T ) # Gives 'True'
# Using 'save'& 'load' doesn't help either
aDT2 <- data.table( a=1:10, b=LETTERS[1:10] )
save( aDT2, file = "aDT2.RData")
bDT2 <- aDT2; rm( aDT2 )
load( file = "aDT2.RData" )
identical( aDT2, bDT2, ignore.environment = T ) # Gives 'False'
Run Code Online (Sandbox Code Playgroud)
我在Linux Mint上运行R ver 3.2.0并且已经使用data.tablever 1.9.4和1.9.5(最新版本)进行了测试.
在SO和谷歌搜索返回这个和这个,但我不认为他们回答这个问题.我仍然试图弄清楚为什么我的脚本在切换到时失败了,rds但我从这开始.
如果知识渊博的SO成员可以提供帮助,我将非常感激.谢谢!
编辑:
大家好,我碰巧找到了解决问题的方法 - 已经发布了以下解决方案.如果它相当不优雅,我道歉.现在,我还有两个问题:
(1)有更好的方法吗?
(2)可以在R和/或data.table代码处完成某些事情来解决这个问题吗?我的意思是,这个问题导致不可预测的错误,并不是第一个浮现在脑海中的东西.我的2美分价值.
新加载的data.table不知道已加载的指针值。你可以告诉它
attributes(bDT)$.internal.selfref <- attributes(aDT)$.internal.selfref
identical( aDT, bDT, ignore.environment = T )
# [1] TRUE
Run Code Online (Sandbox Code Playgroud)
data.frame不要保留此属性,可能是因为它们没有进行就地修改。
| 归档时间: |
|
| 查看次数: |
1285 次 |
| 最近记录: |