【发布时间】:2011-01-28 17:12:39
【问题描述】:
我有时在加载数据文件时使用print( load( "myDataFile.RData" ) ) 列出数据文件的内容。有没有办法在不加载数据文件中包含的对象的情况下列出内容?
【问题讨论】:
标签: r
我有时在加载数据文件时使用print( load( "myDataFile.RData" ) ) 列出数据文件的内容。有没有办法在不加载数据文件中包含的对象的情况下列出内容?
【问题讨论】:
标签: r
如果不加载对象,我认为您无法做到这一点。
一种解决方案是使用包装器将 R 对象保存到 save,该函数会将对象和对象的结构保存到特殊的 Rdata 文件中。稍后您可以将带有包装器的特殊二进制文件加载到load,您可以在其中指定仅列出数据的结构。
我在一个非常基本的包中做了类似的事情,名为saves,可以在 CRAN 上找到。
更新:我做了一个非常简单的元数据解决方案
save.ls <- function(x, file) {
save(list=x, file=file)
l <- ls()
save(l, file=paste(file, 'ls', sep=''))
}
load.ls <- function(file) {
attach(paste(file, 'ls', sep=''));
return(l)
detach(pos=2)
}
使用save.ls 而不是save 保存并使用load.ls 加载以进行测试。元信息保存在单独的文件中(以“ls”结尾),但可以轻松改进机制,例如制作 Rdata 对象和包含元数据的文件的 tar 存档(就像我在上面链接的包中所做的那样)。
【讨论】:
attach(file);ls(pos=2);detach(pos=2)
这样就可以了。大概。 #未测试
【讨论】:
detach 中省略pos=2,因为detach() 默认会分离搜索路径中的第二项。
attach() 确实 调用load() 没有区别,你也可以简单地使用local(load(file)) 获得相同的结果。
在 R v3.0.1 中,load() 函数有一个新参数。使用
load("mydata.RData", verbose=TRUE)
将向您显示已加载的对象。当然,这仍然意味着您必须加载对象。
【讨论】:
也许,
load( "myDataFile.RData",ex<-new.env() )
content=ls.str(ex)
【讨论】: