我有一个包含许多* .rdata文件的文件夹,通过点击它们我直接打开一个工作区。因为我同时打开其中许多,我想知道与每个R控制台/工作区关联的.rdata文件的名称。有没有办法在Windows顶部栏中显示.rdata文件名,或者至少用命令检查它?
答案 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
文件中的对象)。 (这可以很容易地清理,不仅仅是为了内存管理,而且只是更清晰,更强大的执行。我并没有声称在这方面的编码卓越: - )