从 Rstudio 查看器恢复数据框?

Recovering dataframe from Rstudio viewer?

您好,我在名为 'pull3' 的 rstudio session 中创建了一个数据框。然后我离开了 session 并开始了一个新项目。当我回到之前的session时,我可以看到我之前使用Viewer()找到它时的dataframe,但是它已经不在环境变量中了,我似乎无法download/reference 完全没有。

看起来它存储在 data://pull3 中...有人知道如何访问它吗?

谢谢。

在您的项目目录中,您会发现一个名为 .Rproj.user 的隐藏文件夹。在您的目录树中,最终您会找到一个名为 viewer-cache 的文件夹,其中包含一个 .Rdata 文件。

我怀疑目录名称是随机的,因此您必须进行一些挖掘。如果您使用的是 Linux 或 MacOS,您可以尝试 find ~/Project | grep ".Rdata" 来加快进程。

这是我刚刚保存的玩具数据的示例。

Project
└── .Rproj.user
    └── D31E74F4
        └── viewer-cache
            └── 6F635E12.Rdata

您可以使用 load():

加载 .Rdata
load("~/Project/.Rproj.user/D31E74F4/viewer-cache/6F635E12.Rdata")

然后在您的全局环境中将有一个与该文件同名的对象:

head(`6F635E12`)
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

如果您没有使用项目,您可以在 ~/.rstudio-desktop/viewer-cache 中找到该文件。

根据 Ian 的回答,这里有一个函数 returns 一个包含它恢复的所有对象的列表。

recover_data_viewer_cache_objects <- function() {
  active_project <- rstudioapi::getActiveProject()

  if(is.null(active_project)) {
    if(.Platform$OS.type == "windows")
      viewer_cache_files <- Sys.glob(file.path(Sys.getenv("localappdata"),
                                               "RStudio-Desktop",
                                               "viewer-cache",
                                               "*.Rdata"))
    else
      viewer_cache_files <- Sys.glob(file.path("~",
                                               ".rstudio-desktop",
                                               "viewer-cache",
                                               "*.Rdata"))
  } else {
    viewer_cache_files <- Sys.glob(file.path(active_project,
                                             ".Rproj.user",
                                             "*",
                                             "viewer-cache",
                                             "*.Rdata"))
  }

  # record environment, load cached objects, return environment diff
  # (apply family does not work with base::load() or base::get())
  ls_0 <- ls()
  for(o in viewer_cache_files)
    load(o)
  new_objects <- setdiff(ls(), c(ls_0, "ls_0", "o"))
  recovered_objects <- list()
  for(o in seq_along(new_objects))
    recovered_objects[[new_objects[o]]] <- get(new_objects[o])

  recovered_objects
}