- 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
命令行可以按照如下操作:
- FYI: prints a reminder about how to do this.
重启R的方法
R studio 重启有以下方法:
- rs.restartR();
- use the menu item _Session > Restart R;
- Command Shift F10 (Mac OS)
总结一下
- 如果是代码开头习惯写
rm(list=ls())
,换成重启R ; - 使用R studio 这种以project 为单位的项目控制软件。