因为RData占用空间过大,超过800MB。想要请问大家,是否可以删除工作空间?
RData主要存储的什么,删除了会有什么影响呢?

    maoyunyun
    有没有影响取决于你为什么要保留 RData。一般都不必保留,代码在手,天下你有;除非一些特殊情况,比如跑一次程序会耗很长时间。

    maoyunyun 删了会影响我的心情——我的心情会变好很多。每当想到世界上有一台电脑的用户根目录下还悄么叽保存着这个 .RData 文件,我就百爪挠心、彻夜难眠。

    R,最宝贵的是源代码;它,我们只需要写一次。R 码农的一生,应当这样度过:当他想回首数据分析的结果时,不会写邮件问同事要,也不会加载那个意外保存下来的 .RData 文件;这样在他向领导报告时,他就能够说:我已经把我的整个生命和全部精力(以及加班时间),都献给了这个世界上最壮丽的事业——为了可重复的科学研究而斗争。

    ——嗷是的络胡司机《钢铁程序猿是怎样炼成的》

    请电脑上有 .RData 文件的人自觉熟读背诵。我先睡觉去了,明早起来检查。背不下来的人在下面跪好,或者去别人电脑上偷偷运行 file.remove('~/.RData') 以赎罪。

    那东西有点鸡肋,建议尽早断舍离,不要背着历史包袱不放,RStudio 里可以设置退出时不保存 .RData。我通常一上来就是双击 .Rproj 或者在RStudio里打开某个项目,代码放在 .Rmd 或者 .R 文件里,数据放在 ./data 路径下,一般是 .txt 或者 .xlsx 文件,相关资料放在 ./assets 路径下,项目所在目录下基本没有乱七八糟的东西,要是有那就整理下或者扔回收站并粉碎。

    项目完成后可以放博客里分享给别人,这个别人很可能就包括未来的自己。

    .RData 里保存的是启动 R 之后,运算过程里临时储存的对象 (objects)。如果你的运算过程都保存在 R 脚本里了,并且所有输入数据都妥善保存了,并且运算过程比较快,那么这些临时储存的对象都可以在下次打开 R 时重现,这种情况下最好删掉 .RData。这是个好习惯。

    问题在于,不是每个人都愿意养成别人认为的好习惯。删不删除 .RData,我觉得这取决于选择何种生活方式。

    有的人喜欢把东西分门别类,放进抽屉架子里,电脑桌面上干干净净,U盘里的东西可以随便删因为电脑硬盘里有备份,邮件的收件箱里只保留待处理的邮件。这种生活方式下,大概率是不喜欢保留 .Rdata 的:需要什么就去代码和输入数据里找。

    有的人喜欢把东西都摊开在房间的各个角落,电脑桌面上铺满文件,U盘里的东西删掉再也找不到了,收件箱也从不整理。这种生活方式下,大概率是喜欢保留 .RData 并直接加载的:需要什么就去环境里找。

    没有是否对错,只有适不适合。选择适合自己的方式就好。

    当然,前提是你得知道每种选择都有哪些利弊。

      dapengde

      没有是否对错,只有适不适合

      这句话对搞对象来说合适,对于工作来说可能不合适,下面是我的理由,试与dapeng探讨一下。

      工作方式有客观的好坏/对错的评价方式。 虽然“什么是好的工作方式”的具体定义可能在不同环境不一样,但“高效有条理”的方针是放在大部分情况下都适用。因为我们学习工具的核心需求还是用工具来更高效和高质量地工作。

      具体到删不删.RData。 以 “高效有条理”的标准来衡量,不删.RData在大部分情况下都是不应该鼓励的习惯。

      有的人喜欢把东西都摊开在房间的各个角落,电脑桌面上铺满文件,U盘里的东西删掉再也找不到了,收件箱也从不整理。这种生活方式下,大概率是喜欢保留 .RData 并直接加载的:需要什么就去环境里找。

      看你的描述也是不赞成这样铺得到处都是的方式,跟"没有是否对错,只有适不适合"的描述结合起来又有点为了尊重个体自由的政治正确不得不这么说的感觉。 "适合自己就好"的建议太模糊了, 个人觉得作为有经验的R用户(如dapeng你), 在分析一波删与不删.RData的优劣对比之后还是得尽量帮助不熟悉R的小伙伴养成良好编程习惯,给出一点清晰的建议。

        tctcab
        不不不,这不是为了政治正确。我的建议很明确,在开头就说了哪个是好习惯。

        之所以说适合就好,是根据我的观察,有些习惯是很难改的。年轻的时候当然可以跟自己较劲,但上了年岁就要选择哪些需要跟自己和解。有些看起来“坏”的习惯,其实影响没那么糟糕。你也看出来了,我列举出来的那些习惯里分成两段来说,是有个人倾向的。可是,很多人有那些“坏”习惯,照样工作出成果,职称评得快,自己过得也开心,已经很满意了,那么何必去改呢。养成“好”习惯目的不也是为了开心嘛。硬花精力去改,反而破坏了原来的开心局面。当然,这还是因人而异,如果觉得坏习惯会影响工作影响生活,那就去改。这就绕回来了:适合自己的,就是最好的。

        斗胆说一个使用 RData 的场景:有段时间用 bookdown 写书,旷日持久,经常中断。每次想接着上次写,都要把前面的代码块逐个运行一遍,麻烦的是有些对象是在其他章节的 Rmd 文件里,又得逐个打开运行。后来设置了自动保存和加载 RData 文件,岁月便静好了。

        如果需要给不熟悉 R 的小伙伴明确表个我的态的话:

        1. 不自动保存 RData 是个好习惯。
        2. 如果习惯实在改不了,舍鱼取熊掌,出成果更重要。
        3. 了解清楚 RData 是啥,合理用它。

        R默认会在关闭时提示是否需要保存工作空间,如果选择“是”就会保存到.RData文件里,并且下次启动R的时候如果发现.RData文件存在则会自动加载。优点在于会让你觉得这是从“上次结束的地方继续开始”,因为之前算好的东西都在那里。

        但实际上这样子有非常大的潜在问题:首先,这意味着你的工作空间并不“干净”,你启动R之后运行的代码结果可能受到了加载的工作空间的影响(比如一个在你代码里没有定义的变量a,却恰好在.RData里有你之前哪个项目里保存了的a变量)。这意味着你的代码结果是难以复现的——别人想重跑你的代码重现你的结果还需要跟你要一份.RData文件?

        顺着这个思路想下去,其实你自己也不能保证能够复现你的代码结果,因为这次退出之后你又保存了一下.RData文件,覆盖了曾经那个文件——你自己都回不到曾经的跑出结果的那个状态了。

        保存.RData的另一个问题在于你的不同项目、不同时期、不同目的的变量结果都存在一个.RData里面,除了前面说的带来混乱,影响结果的可重复性之外,另一个问题就是文件大小会越来越大。例如某次计算你保存了一个中间变量,是一个高维矩阵,占用内存和硬盘空间都很大,而且跑到最后忘了删除这个中间变量,于是它就一直存在在你的.RData里。

        进行数据分析,代码才是核心,有代码就可以重现出分析的结果,所以代码都是要好好保存好好注释的。而如果一些关键的计算结果,或者耗费时间很长的计算结果,就可以用RData文件保存下来,但是这个保存,往往也应该自己好好对结果文件命名,添加文档,让人知道保存的到底是什么。至于R自己默认的.RData工作空间,最好选择删掉,并设置默认不选择保存工作空间。