前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《高效R语言编程》9、10--高效协作和学习

《高效R语言编程》9、10--高效协作和学习

作者头像
用户1075469
发布2021-07-27 16:00:32
9390
发布2021-07-27 16:00:32
举报
文章被收录于专栏:科技记者科技记者

软件配置

本章主要是代码标准与技术的内容,需要安装的包是lubridate和dplyr,这些包用来演示良好的实践。高效协作的5条高级技巧:

  • 保持统一的编码风格
  • 仔细思考你的注释并随时更新
  • 尽可能使用版本控制
  • 信息化提交消息
  • 不要害怕来自同事的反馈

编码风格

编码风格要前后一致,没有唯一,几个多数程序员都赞成的风格:

  • 模块化代码
  • 注释你的代码
  • 不要重复自己的代码
  • 代码简洁、清晰、一致 比如在R语言里用<- 代替=,符合自动化原则,改善代码最简单的是,使用Rstudio自动完成代码改善。

使用Rstudio风格化代码

Rstudio可自动清理不标准缩进和格式化代码,选中要格式化的代码,“”Ctrl-I“自动缩进。Ctrl-Shfit-A将格式化代码,添加空格以保证最大可读性,发现在code菜单下也能找到相应选项。

代码语言:javascript
复制
# 原代码
for (a in 1:9) {
print(a*2)}
# Ctrl-I
for (a in 1:9) {
  print(a*2)}
# Ctrl-Shfit-A
for (a in 1:9) {
  print(a * 2)
}

文件名

代码后缀R,文件名小写,避免空格,使用破折号或者下划线分割单词。

加载包

开始出加载,加载必要包时,使用library,而不是require,因为缺包时library会报错,包名应该用引号包起来。

注释

太多注释降低效率,确保注释有具体含义,避免无意义注释。注释应该提供语境,以#开头,后面加一个空格,Rstudio中使用Ctr-Shift-C注释或取消注释。如果注释使用#----,它可以折叠两个这种注释之间的代码。

对象名

为你的对象使用含义清晰、前后一致的名字,会大幅提高项目的效率。如果一个对象只使用一次,那无所谓啦。建议使用get_result这样的形式,避免使用.,防止Python程序员受到迷惑。函数中,必选参数放第一位,紧接着可选,特殊的...放最后,如果对应布尔型参数,为了清晰应该使用TRUE/FALSE,因为虽然T/F是缩写也可以使用,但可能被重新赋值,引起错误。尽量避免以来别的参数的参数,会使非常难以理解。典型情况是设置变量的缺省值NULL,并使用is.null()检查它的值,而不是使用missing(),只要可能,避免使用已有函数的名字。

样例包

lubridate是一个很好的样例,拥有一致的命名系统,便于用户猜测其特性和行为。

代码语言:javascript
复制
library(lubridate)
#> 
#> Attaching package: 'lubridate'
#> The following objects are masked from 'package:base':
#> 
#>     date, intersect, setdiff, union
ymd("20110604")
#> [1] "2011-06-04"
mdy("06-04-2011")
#> [1] "2011-06-04"
dmy("04/06/2011")
#> [1] "2011-06-04"

赋值

“<-”和“=”都可以,多数R用户一般应“<-",因为函数调用时二者有区别。

代码语言:javascript
复制
system.time(time=1000)
# Error in system.time(time = 1000) : 参数没有用(time = 1000)
system.time(time<-100000)
用户 系统 流逝 
0.00 0.01 0.02 

空格

一致的空格风格容易增强你的代码可读性,应该在+-\以及*的周围添加空格,包括赋值符号”<-",可以帮助避免bug。Ps.关于bug的来历,据说是这样的,第一台计算机ENIAC的连接线路经常被虫子咬断,于是就有了找虫子之说。

缩进

使用两个空格缩进代码,不要混合使用tab和空格,Rstudio自动转换Tab为空格,Tools-Global options-Code

大括号

大括号的开口{,不应该另起一行,随后紧跟分行符,这样会报错。大括号的封闭部分}应该独立成行}(除非紧跟else,else紧跟其后),大括号的代码应该缩进(Rstudio执行该规则的)。

代码语言:javascript
复制
x = 4
y <- 6
if (x>5) {
  x
} else{
  y
}

版本控制

可以备份你的代码,版本控制系统永远备份你的代码。这里作者推荐使用git。

安装git

代码语言:javascript
复制
# deb系系统
sudo apt install git # 当然windows/mac也可以使用github desktop解决

## 提交 保持提交原子化,每次提交只做一件事,并附上清晰的说明,这仅更新本地文件分支,如果想更新远程的,需要git push命令。

或者右侧选项卡,同样可以操作(下图),前提是你建立项目时打开了版本控制选项,或者tools-Vsersion Control--Project Setup,中选择git。

Github

当然,大家都知道这是全世界最大的同性交友平台,开个玩笑。国内由于众知的原因,访问速度已经接近于 当年的拔号上网时代,好在有许多方法可以加速,比如镜像/导入到国内的gitee,或者用这个我在用的软件https://github.com/docmirror/dev-sidecar。

代码语言:javascript
复制
devtools::install_github() #这个命令可以轻松安装github上的包,但是不能update

分支、分叉、更新、克隆

git是一个需要花费长时间学习的大型程序,掌握其高级功能的基础可使你成为一个较高效的协作者。分支是存储不同的版本,git允许你在项目的不同版本之间跳转。git checkout -b test #相当于创建一个分支并转入分叉类似分支,但存放在别人机器上,通过git clone可以将该分叉克隆到本地,更易于协作。pull request是Github的一种机制,可以添加你的代码到已有项目中,PR为别人提供了在合并之前逐行注释代码的机会。

代码审查

考虑以下几个问题:

  • 1、代码正确吗?具有合理的文档?
  • 2、能否再改善
  • 3、代码是否符合已有编程风格
  • 4、有自动测试吗?是否充分?注意事项:
  • 1、反馈要建设性的,除了指出错误,还要有改善建议;无误时赞扬
  • 2、审查代码设定时间表或审核行数
  • 3、 应该在代码合并前完成,尽快改错 StackOverflow是一个交流的好去处。

第十章 高效学习

软件配置

swirl包

代码语言:javascript
复制
install.packages("swirl")
library(swirl)
# | Hi! I see that you have some variables saved in your workspace. To keep
| things running smoothly, I recommend you clean up before starting swirl.

| Type ls() to see a list of the variables in your workspace. Then, type
| rm(list=ls()) to clear your workspace.

| Type swirl() when you are ready to begin.

Warning message:
程辑包‘swirl’是用R版本4.0.5 来建造的 

高效学习的5个高级技巧

1、使用R内部帮助

针对主题探索R

代码语言:javascript
复制
help.search("optim")# 或者??optim
# 更加精确些
help.search(pattern = "optimistation|optimiz",
                  fields = c("title", "concept"), package = 'stats')
# 另一个是apropos()
apropos("optim")#给出结果较少
# [1] "constrOptim" "optim"       "optimHess"   "optimise"    "optimize"  
apropos("lm")
 [1] ".colMeans"       ".lm.fit"         "colMeans"        "confint.lm"     
 [5] "contr.helmert"   "dummy.coef.lm"   "glm"             "glm.control"    
 [9] "glm.fit"         "KalmanForecast"  "KalmanLike"      "KalmanRun"      
[13] "KalmanSmooth"    "kappa.lm"        "lm"              "lm.fit"         
[17] "lm.influence"    "lm.wfit"         "model.matrix.lm" "nlm"            
[21] "nlminb"          "predict.glm"     "predict.lm"      "residuals.glm"  
[25] "residuals.lm"    "summary.glm"     "summary.lm"     

查找和使用简介

包简介是理解函数的最好方式,是详细文档的片段,一般高质量,用于演示实例,在宽泛解释下提供更长的例子。如果某包缺少简介,可以尝试自己编写一个。

代码语言:javascript
复制
# 创建简介
# 首先下载源码
devtools::use_vignette() # 没找到这个函数呢?根据小洁的博文,应该是过时了

附上替代参考:写R包的长篇使用文档vignette - 简书 (jianshu.com)

代码语言:javascript
复制
# 浏览某包简介,浏览器自动打开网页,和vignette(package = "benchmarkme")类似,后者只打开一个窗口,提示有简介
 browseVignettes(package = "benchmarkme")
# 不加包名,就展示所有的,好多呀
browseVignettes()
vignette("introduction",package = "ggplot2") # 比较怪,没反应,可能也过时了

获取函数帮助

代码语言:javascript
复制
# 这个大家应该很熟悉了,帮助页面描述功能,而不是如何工作,因此觉得难懂
help("optim")
?optim
# ...之前是必要参数,之后是可选参数,
Usage
optim(par, fn, gr = NULL, ...,
      method = c("Nelder-Mead", "BFGS", "CG", "L-BFGS-B", "SANN",
                 "Brent"),
      lower = -Inf, upper = Inf,
      control = list(), hessian = FALSE)

optimHess(par, fn, gr = NULL, ..., control = list())
example(optim) #会收获三张图和一个代码例子呢

例子位于帮助底部

阅读源码

Rstudio,单击某函数,按F2,即会打开源代码(有的笔记本可能要按Fn+F2) 比如这个rowname()的

代码语言:javascript
复制
function (x, do.NULL = TRUE, prefix = "row") 
{
  dn <- dimnames(x)
  if (!is.null(dn[[1L]])) 
    dn[[1L]]
  else {
    nr <- NROW(x)
    if (do.NULL) 
      NULL
    else if (nr > 0L) 
      paste0(prefix, seq_len(nr))
    else character()
  }
}

swirl

R交互式教学平台,是R的帮助大全

代码语言:javascript
复制
library(swirl)

| Hi! I see that you have some variables saved in your workspace. To keep things running smoothly, I
| recommend you clean up before starting swirl.

| Type ls() to see a list of the variables in your workspace. Then, type rm(list=ls()) to clear your
| workspace.

| Type swirl() when you are ready to begin.

> swirl()

| Welcome to swirl! Please sign in. If you've been here before, use the same name as you did then. If
| you are new, call yourself something unique.

What shall I call you? 

感觉像古老的dos游戏最低级版本,自由探索吧。

在线资源

  • R社区、官方手册、读现有出版物最新进展、邮件列表等等
  • 遇到困难寻求帮助 Stack Overflow网站提出问题要有最小数据集、最小案例
  • 实战演示R书籍和教程,深入学习最有效 Rstudio 和DataCamp提供的免费在线课程,《R数据科学》、《R programming for Data Science》、《Advanced R Programming》 -巩固学习(写出并传授),也就是传播知识 docendodiscimus
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-07-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 科技记者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 软件配置
  • 编码风格
  • 使用Rstudio风格化代码
  • 文件名
  • 加载包
  • 注释
  • 对象名
  • 样例包
  • 赋值
  • 空格
  • 缩进
  • 大括号
  • 版本控制
    • 安装git
      • Github
        • 分支、分叉、更新、克隆
          • 代码审查
          • 第十章 高效学习
          • 软件配置
          • 高效学习的5个高级技巧
            • 1、使用R内部帮助
              • 针对主题探索R
              • 查找和使用简介
              • 获取函数帮助
              • 阅读源码
              • swirl
            • 在线资源
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档