R语言:他们不会教你的小技巧(第二章)

2022-01-29  本文已影响0人  11的雾

第二章:以项目为导向的工作流程 Project-oriented workflow

上一章我们说了rm(list=ls()) 但是我们不推荐用它,因为他并不能重置一些东西,比如你导入的包是不会重置的。还不如重启R直接了当。
但是它也可以用在项目之间的重置上,比如你project A和project B在不同的目录。那么应该怎么办呢?

2.1 首先来说说 “setwd()”:不要再使用啦!

解决工作路径问题的常见做法是使用setwd()函数,在每个脚本的开始设置工作目录。
相信绝大多数人都是像这样:

library(ggplot2)
setwd("/Users/jenny/cuddly_broccoli/verbose_funicular/foofy/data")
df <- read.delim("raw_foofy_data.csv")
p <- ggplot(df, aes(x, y)) + geom_point()
ggsave("../figs/foofy_scatterplot.png")

Setwd()命令可以使路径起作用,但是对于除了作者之外的其他人根本不起作用。同样有可能对于作者本身在一两年后或者其他电脑上也不起作用。那么对于重新画这个图或者再次延伸修改这个图就很麻烦。

固定路径,或者绝对路径,特别是在整个代码中散布的绝对路径,会使得代码很脆弱。这样的代码在时间上或者空间上不能很好的传播。

如果在阅读本文之后,你仍然决定在脚本中使用setwd(),那么请你至少非常注意以下几点:
1. 只在文件的最开始使用setwd(),即在一个明显且可预测的位置。如果有人必须手工编辑这些,让他们更容易。
2. 总是将工作目录设置为相同的内容,即项目的顶级目录(而不是子目录)。始终构建与此相关的后续路径。像上面举的例子一样。

2.1.1 如果你喜欢使用setwd(),那么请继续用。

如果在你使用setwd() 时没有给你或者你的合作者造成麻烦,那么你就继续用,这也是我多年的实践。

但最终我承认,每当我移动文件、与同事合作进行分析、或在一台新电脑上时,这确实会给我带来痛苦。然后,作为STAT545的讲师,我开始大量运行其他人的代码。每周有多达80名学生提交多个. r和. rmd文件,其中充斥着setwd()调用,需要我手工编辑。这是压倒骆驼的最后一根稻草,使我决心把这个问题和一些解决办法清楚地表达出来。你可以从你的生活中设计出这种特别的烦恼。

2.2 困境和解决方案

问题陈述:
* 我们希望在project A中将R的工作目录设置为path/to/projectA,在项目B中将R的工作目录设置为path/to/projectB。
* 但是我们也希望像setwd(“path/to/projectA”)这样的代码不出现在我们的.R 脚本中。

技术水平最低的解决方案是,当您从项目A切换到项目b时,交互式地自己设置工作目录,同时重新启动R,执行setwd(“path/to/projectA”),但不要将其放入脚本中。这是行得通的! 但是,大多数人会用回setwd(),并且/或者不愿意在项目之间快速循环,这已经足够让人恼火了。

我强烈建议使用支持基于项目的工作流的IDE。这消除了开发便利性和代码可移植性之间的紧张关系。

2.3 把工作相关的东西都组织到项目中去

这些习惯是协同作用的:如果你把它们都一起练习,你会得到最大的回报。

这些习惯保证了项目可以在您的计算机或其他计算机上移动,并且仍然“只工作”。我认为,随着时间的推移,这是在不同的计算机或用户之间创建可靠的、礼貌的行为的唯一实用约定。这个约定对于R来说既不是新的,也不是唯一的。

这就像同意我们都在左边或右边开车一样。文明的一个标志就是以公共安全的名义,遵循一些约束你行为的习俗。

持续更新中。。。

上一篇 下一篇

猜你喜欢

热点阅读