52-R茶话会-十二:为什么我不建议你使用 rm(list=ls())

2021-12-17 11:00:33 浏览数 (1)

  • Ref Links : Chapter 1 Saving source and blank slates | What They Forgot to Teach You About R (rstats.wtf)

这个内容来自一本很有意思的书——《What They Forgot to Teach You About R》。

为什么我不建议你使用 rm(list=ls())

你可能会经常在脚本中遇到rm(list=ls()),尤其是某些workflow 的内容。

它们的本意确实是好的:希望开启一个新的R。

但我们需要注意的是,rm(list=ls()) 并不等于R 的重启。这也是不建议如此操作的原因。

存在以下问题:

  • 略显鸡肋,既然是为了开启一个新的R,那何不直接重启R 呢;
  • 对于脚本的开发者来说:
    • 如果在脚本开发过程中加载了新的包,而没有将其写在library 中,其他使用者会报错;
    • 如果在脚本开发过程中进行了其他配置,如stringsAsFactors = FALSE,而未在脚本中声明,则其他使用者也会报错;
  • 可能外部读取使用了相对路径,而在命令行中直接修改了路径setwd(),而此时又未在脚本中声明新的路径,导致重启R 后发生报错。(这也是不建议使用setwd 的原因)

一些改善的策略:

  • 用R studio 等可以通过project 为单位管理脚本的开发工具,可以很方便的每次在Rproj 文件所在的位置即设定为工作目录,而且可以非常方便的切换到其他的项目;
  • 避免在脚本中使用rm(list=ls())setwd(),可以使用rs.restartR() 替代rm(list=ls())
  • 将重要的对象导出到output 文件夹内,保存为.Rdata,其他脚本中如果需要使用可以直接读取;
  • 所有的文件输出读取都使用相对路径;
  • 如果是使用R studio 的话,关闭默认保存环境中变量到.Rdata 文件;
    • FYI: prints a reminder about how to do this.usethis::use_blank_slate()
    • If you run R from the shell, launch with . You might want to define an alias in your : . Learn more by executing in a shell.R --no-save --no-restore-data``.bash_profile``alias R='R --no-save --no-restore-data'``R --help

    命令行可以按照如下操作:

重启R的方法

R studio 重启有以下方法:

  • rs.restartR();
  • use the menu item _Session > Restart R;
  • Command Shift F10 (Mac OS)

总结一下

  • 如果是代码开头习惯写rm(list=ls()) ,换成重启R ;
  • 使用R studio 这种以project 为单位的项目控制软件。

0 人点赞