如何获取未保存的脚本标签页

43

我想知道在R Studio中是否有可能获取未保存的脚本标签页。 我不小心打开并切换到新项目,然后我的未保存的脚本消失了。 有人能帮忙找回我的未保存的脚本标签页吗?


3
有一个隐藏文件夹叫做".Rproj.user",你看过它了吗? - tagoma
3
那个隐藏文件夹在哪里? - Agaz Wani
1
如果您有保存的.Rproject文件或查找历史记录文件,可以将操作系统恢复到特定日期,然后打开它。在Rstudio中打开.Rhistory文件。 - user5249203
@rawr 我也认为未保存的脚本应该在那里,但不幸的是没有找到。你所说的行为我之前在Rstudio中也看到过。但这一次我不确定出了什么问题,也无法通过打开旧项目或其他任何操作来获取我的未保存的脚本。 - Agaz Wani
你的 全局选项/首选项 > 通用 是否有一个复选框,旁边写着“恢复先前打开的源文件”? - rawr
显示剩余2条评论
9个回答

59

如果您使用的是 Windows 操作系统,请前往以下文件夹:

C:\Users\[your user]\AppData\Local\RStudio-Desktop\sources
< p >< em > 更新: 自 RStudio 1.4.* 版本以后,这些源代码已被移至:
C:\Users\[your user]\AppData\Local\RStudio\sources

其余的解释保持不变。

如果您使用的是Ubuntu操作系统:

home/[your user]/.rstudio-desktop/sources

在那里有你所有未保存标签的文件夹,特别是以 s- 开头的文件夹,如 s-******

有两种文件(例如 D395C3B4D395C3B4-contents
D395C3B4 文件包含有关未保存标签的 JSON 信息 (例如“tempName”:“Untitled76”),对应的代码在 D395C3B4-contents 文件中。
使用记事本打开 D395C3B4-contents 文件。


这真是救命之恩,也许对于不使用RProject的Windows用户来说是最好的答案(我感到惭愧)。谢谢! - pedrostrusso
1
嘿,我们也可以直接在Rstudio上通过“打开文件”将那些contents文件打开,以便将它们插回原处!非常感谢 :) - FatihSarigol
1
在Ubuntu中是否有类似的方法? - Cris
这种方法可能在某个时候有效,但截至2022年3月,我导航到上述路径中的文件夹,它有一些脚本,全部都是2天以上的旧版本,即使如此,它也只包含整个内容的约25%。请查看以下以“如果有人仍在寻找答案…”开头的答案。 - Adam_S
非常感谢!你刚刚为我节省了好几个小时!!! - DonCarleone
显示剩余2条评论

27
如果有人仍在寻找答案或将来需要查看,请阅读以下工作方法。
据我所知,没有直接恢复最后会话中未保存的脚本选项卡或Rstudio崩溃前的简单方法。项目文件夹通常包含隐藏文件夹 .Rproj.user ,其中包含许多子文件夹,源数据库是其中之一(简称为 sdb )。在子文件夹sdb中具有前缀“s-”,您可以以JSON格式找到几乎所有未保存的脚本选项卡。您可以复制并使用它们来获取未保存脚本选项卡的内容。
例如,我有一个名为 BDFFFF92 的文件,位于项目位置 .Rproj.user / 586F3E74 / sdb / s-DB8D414F / 中。
# reading the JSON file
dataObj <- jsonlite::fromJSON('.Rproj.user/586F3E74/sdb/s-DB8D414F/BDFFFF92', simplifyVector = T)

未保存的脚本中的实际内容将出现在JSON对象的contents中。
# Printing the content from the JSON object
writeLines(dataObj$contents)

3
救命稻草。对于所有寻找答案的人,它都在这里。 - Dan
1
这就是答案。其他建议可能在某个时候有效,但对于我来说,在3/1/22上它们并没有起作用。以“如果您使用的是Windows…”和“我假设您正在使用R-Studio”开头的答案有一些语法,但没有比3天左右更新的内容。这个答案就在这里。谢谢Prradep! - Adam_S

23

我假设您正在使用Rstudio。 一般来说,即使您没有保存它,它也会将整个工作区,包括未保存的脚本和控制台历史记录,存储为原样。

根据您是否运行了文件,有两件事情可以做来检索这些脚本中的代码。

  • 如果您在控制台中执行了脚本,则您的代码将存在于作为.Rhistory文件保存的控制台历史记录中,该文件位于R控制台的主目录中。 主目录可以是“文档”文件夹或之前打开的项目文件夹。
  • 您可以尝试打开已保存的脚本(如果有),该脚本在您转换到新项目时处于打开状态。 这将打开在切换到新项目之前处于活动状态的工作区。 您的文件应该在那里。

希望这可以帮助到您。


2
感谢您的评论。1) .Rhistory 中有一些代码,但看起来像垃圾文件,找不到这些文件。2) 我之前看到的 RStudio 的行为与当前情况不同。我曾经在打开 RStudio 时获得所有选项卡,但现在情况不同。它只打开我要求 RStudio 打开的脚本。 - Agaz Wani
2
尝试在RStudio中打开.Rhistory文件,而不是使用文本编辑器。记事本或NP ++无法正确显示该文件。 - Divya Manglam
此回答假定您最近保存了工作区或脚本。但无论哪种情况,如果我们已经这样做了,我们就不会在这里了。以"If someone is still looking for..."开头的回答是正确的方式。 - Adam_S

14

对于那些即使使用了 .Rhistory 文件也无法恢复脚本的人:

我在工作驱动器的"AppData"文件夹中找到了我的脚本。在我的情况下,它位于"C:\Users\my_user\AppData\Local\RStudio-Desktop"。然后有一个名为"history_database"的文件,如果用记事本打开它,我就可以看到所有以前的编码内容

如果你在 Rstudio 中重新打开这个文件,你可以像查看日志历史一样来查看它。如果太大而无法查看所有条目,只需将它复制到记事本中,并再次使用 R(Ctrl + O)打开它。我不知道为什么其他地方都没有看到这种方式......

我刚开始学习 R,所以为了重新排列脚本,我将在 R 中显示的“日志历史”复制到 Excel 中,然后通过固定宽度进行文本分列。这是对我起作用的方法,没有其他恢复方法可以做到这一点。


刚刚用这个工具找到了我三个月前跑过的代码,其他以前对我有用的顶级解决方案在这里失败了。如果你有一小段代码与你运行过的所有其他代码都不同,并且你可以在记事本中搜索它,那么这个工具非常有用。 - cdtip

12

RStudio项目可能一开始会让人感到困惑。简单来说,RStudio项目有两个作用:

  1. 打开一个工作目录,可以在不同的用户和计算机之间进行操作(例如,不使用setwd()并且避免与不同本地路径产生冲突)。
  2. 在RStudio中创建一个包含R文件、数据等的工作区。

不太明显的是,在RStudio中的默认设置是在"Project: (None)"中创建脚本。

因此,如果您之前没有设置任何项目,要恢复缺失的脚本,您需要返回到"Project: (None)",其中包含所有与任何RStudio项目无关的开放式工作。

要执行此操作,请转到RStudio窗口的右上角,并执行以下操作:

  1. 找到“项目”旁边的小下拉菜单。
  2. 单击小三角形以获取项目下拉菜单,并选择“关闭项目”。
  3. 一旦新项目被关闭,您的旧标签应该会重新出现。下拉菜单也应该现在显示为:“项目:(无)”(假设您之前没有为您的先前工作设置项目)。

1
这是非常简单,但却能救命的技巧。应该将其标记为答案。 - Azim
2
你刚刚救了我的命。为什么这个问题没有出现在谷歌搜索结果的前面?而且为什么RStudio表现得如此奇怪,期望用户关闭项目以检索暂时保存的脚本?生活充满了奇迹。 - zebralamy

3

我遇到了一个问题,就是RStudio没有加载任何脚本,以上的建议都没有帮助。不过,我可以在 C:\Users\[your user]\AppData\Local\RStudio-Desktop\sources 下看到所有的文件。

最后,我删除了 lock_filerestart_file。这之后,当我启动RStudio时,所有的脚本都被加载了。


今天我遇到了这个确切的问题。删除lock_filerestart_file之后,所有未保存的脚本都重新出现了。谢谢! - Tung

2

回显上述想法,使用history_database查找已通过控制台运行的所有先前代码记录。

对于在Linux服务器上使用RStudio的任何人:我能够在以下位置找到它:~/.local/share/rstudio/history_database

希望这能帮助那些丢失了保存的代码并需要将其拼凑起来的人。


1

你可能想知道的一些事情包括:

  1. C:\Users\[Your-User]\AppData\Local\RStudio-Desktop 目录下,有一个包含所有 RStudio 会话中执行的命令的历史数据库。
  2. 对于每个会话,在你的工作目录中,你会注意到有一个名为 .Rproj.user 的隐藏文件夹。
  • 在这个文件夹中,有一个共享文件夹和另一个带有生成的密钥的文件夹。 enter image description here

  • 这个文件夹是 C:\Users\[Your-User]\AppData\Local\RStudio-Desktop 的子集。区别在于它只针对一个特定的会话,而前者适用于所有会话。

  • 如果你进入 sources 文件夹,你会注意到以下类似的更多文件夹:

enter image description here

  • 你正在寻找的文件夹可能在这些文件夹之一中

enter image description here

  • 文件名XXXXXXXXX是有关相关未保存/已保存脚本的元数据,而XXXXXXXX-contents包含未保存/已保存脚本的代码。

  • 如果您打开元数据,将会在properties下找到一个名为tempName的标签,其中包含文件的未命名名称。

enter image description here

  • 这样你就可以找回你正在寻找的未保存的脚本。
  1. 在你的工作目录中还有另一个文件,即 .Rhistory。这个文件记录了在终端上执行的所有命令的历史记录。请注意,即使你从R脚本中执行命令,它也只能从终端运行。因此,你也可以复制最近执行的命令来恢复整个脚本。

希望你能找到你要找的东西。

继续编码吧!


-1
对于Windows系统:如果您之前设置了文件关联,使得双击一个.R文件会打开并发送到Rstudio,那么以下方法对我来说已经多次有效:
  1. 使用Windows任务管理器关闭所有RStudio实例。
  2. 现在使用Windows文件资源管理器导航到一个.R文件。双击它。根据我的经验,这会恢复所有以前保存的脚本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接