列出 R 数据文件的内容而不加载
Posted
技术标签:
【中文标题】列出 R 数据文件的内容而不加载【英文标题】:listing contents of an R data file without loading 【发布时间】:2011-01-28 17:12:39 【问题描述】:我有时在加载数据文件时使用print( load( "myDataFile.RData" ) )
列出数据文件的内容。有没有办法在不加载数据文件中包含的对象的情况下列出内容?
【问题讨论】:
【参考方案1】:如果不加载对象,我认为您无法做到这一点。
一种解决方案是使用包装器将 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 存档(就像我在上面链接的包中所做的那样)。
【讨论】:
元数据解决方案确实有意义。我不了解有关 R 数据文件的 bean,并认为它们可能具有内部元数据 @JD Long:这是我能想象的唯一方法。我在上面的回答中编造了一个原始示例来说明我的意思。不过,它可以以更简洁的方式轻松实现,所以这个演示函数绝对不能用于生产用途:) R 中的元数据解决方案已经存在,称为延迟加载 - 请参阅 ***.com/questions/8700619/…【参考方案2】:attach(file);ls(pos=2);detach(pos=2)
这样就可以了。大概。 #未测试
【讨论】:
您可以在detach
中省略pos=2
,因为detach()
默认会分离搜索路径中的第二项。
我测试了我在存档中找到的 Ripley 的建议但没有提交,因为它确实加载了我用作示例的相当大的数据集。
附加和加载是从 R 级别访问 .RData 文件的唯一明确定义的方法(如果您知道文件格式,可以将它们作为二进制连接打开并读取)。如果有人想编写超出此范围的 C 代码(或二进制连接上的 R 代码),我相信它可能会受到核心欢迎......
是的,attach()
确实 调用load()
没有区别,你也可以简单地使用local(load(file))
获得相同的结果。【参考方案3】:
在 R v3.0.1 中,load()
函数有一个新参数。使用
load("mydata.RData", verbose=TRUE)
将向您显示已加载的对象。当然,这仍然意味着您必须加载对象。
【讨论】:
【参考方案4】:也许,
load( "myDataFile.RData",ex<-new.env() )
content=ls.str(ex)
【讨论】:
以上是关于列出 R 数据文件的内容而不加载的主要内容,如果未能解决你的问题,请参考以下文章