列出 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() 函数有一个新参数。使用

加载 RData 文件
load("mydata.RData", verbose=TRUE) 

将向您显示已加载的对象。当然,这仍然意味着您必须加载对象。

【讨论】:

【参考方案4】:

也许,

load( "myDataFile.RData",ex<-new.env() )
content=ls.str(ex)

【讨论】:

以上是关于列出 R 数据文件的内容而不加载的主要内容,如果未能解决你的问题,请参考以下文章

从数据流而不是从文件加载图像

unix

UNIX命令

PHP 中如何在同一个文件中写入而不覆盖以前写的内容

liunx 命令

读取超大文件 R 的列名和列值