我感兴趣的是在 RDATA 文件中列出对象并仅加载选定的对象,而不是整个集合(以防某些对象可能很大或可能已存在于环境中)。我不太清楚当名称存在冲突时如何做到这一点,因为attach()
效果不太好。
1:用于检查 R 数据文件的内容而不加载它:这个问题类似于,但不同于,在列出 R 数据文件的内容而不加载 https://stackoverflow.com/questions/4831050/listing-contents-of-an-r-data-file-without-loading
在这种情况下,提供的解决方案是:
attach(filename)
ls(pos = 2)
detach()
如果文件中的对象与全局环境中的对象之间存在命名冲突,则会出现此警告:The following object(s) are masked _by_ '.GlobalEnv':
我尝试创造一个新环境,但我似乎无法融入其中。
例如,这会产生相同的错误:
lsfile <- function(filename){
tmpEnv <- new.env()
evalq(attach(filename), envir = tmpEnv)
tmpls <- ls(pos = 2)
detach()
return(tmpls)
}
lsfile(filename)
也许我把事情搞砸了evalq
(or eval
)。还有其他方法可以避免命名冲突吗?
2:如果我想访问一个对象 - 如果没有命名冲突,我可以只使用 .rdat 文件中的对象,或者将其复制到新对象。如果存在冲突,如何访问文件名称空间中的对象?
例如,如果我的文件是“sample.rdat”,对象是surveyData,并且全局环境中已经存在一个surveyData对象,那么我如何从file:sample.rdat
命名空间?
我目前通过将所有内容加载到临时环境中来解决这个问题,然后复制出需要的内容,但这效率很低。