如何检查当前会话R中加载的.rdata文件的名称

时间:2017-04-15 15:38:34

标签: r

我有一个包含许多* .rdata文件的文件夹,通过点击它们我直接打开一个工作区。因为我同时打开其中许多,我想知道与每个R控制台/工作区关联的.rdata文件的名称。有没有办法在Windows顶部栏中显示.rdata文件名,或者至少用命令检查它?

1 个答案:

答案 0 :(得分:1)

我认为没有一种自动或简单的方法可以找到答案。但是你可以尝试找到可能的罪魁祸首,假设(a)每个.Rdata文件包含一些唯一的变量名称,并且(b)加载每个文件(暂时)获胜&#39时间过长了。

快速设置:

iris2 <- iris
mtcars2 <- mtcars
save(mtcars2, file="~/Downloads/mtcars.Rdata")
save(iris2, file="~/Downloads/iris.Rdata")

我点击mtcars.Rdata,然后是RStudio。

ls()
# [1] "mtcars2"         

现在&#34; hack&#34;:

list_of_vars <- sapply(list.files(pattern = "*.Rdata"),
  function(f) {
    e <- new.env(parent = emptyenv())
    load(f, envir = e)
    ls(envir = e)
  }, simplify = FALSE)
list_of_vars
# $iris.Rdata
# [1] "iris2"
# $mtcars.Rdata
# [1] "mtcars2"

Filter(function(x) all(exists(x)), list_of_vars)
# $mtcars.Rdata
# [1] "mtcars2"

这表明我双击的文件是mtcars.Rdata。 (到目前为止,这既不健全,也不是万无一失。如果你有可变的名称共性,你可能会失去运气。)

<强>更新

由于您的.Rdata文件具有相似或相同的变量名称(如果不是内容),那么您可以调整上述技术来检查这些对象本身是否相同,而不仅仅是变量名称的存在。

新设置:

mtcars2 <- mtcars
save(mtcars2, file="mtcars1.Rdata")
mtcars2$mpg[1] <- 21.1
save(mtcars2, file="mtcars2.Rdata")

检查内容:

VERBOSE <- TRUE
vars_equal <- sapply(list.files(pattern = "*.Rdata"),
                     function(f) {
                       if (VERBOSE) message(f)
                       e <- new.env(parent = emptyenv())
                       load(f, envir = e)
                       all(sapply(names(e), function(varname) exists(varname, envir = .GlobalEnv) && identical(e[[varname]], get(varname, envir = .GlobalEnv))))
                     })
vars_equal
# mtcars1.Rdata mtcars2.Rdata 
#         FALSE          TRUE 

如果您的对象很大,那么这将导致内存使用量瞬间增加。 R垃圾收集后,应清除在外部.Rdata内创建的所有临时环境(以及每个sapply文件中的对象)。 (这可以很容易地清理,不仅仅是为了内存管理,而且只是更清晰,更强大的执行。我并没有声称在这方面的编码卓越: - )