《高效R语言编程》4-高效工作流

2021-05-20 10:35:38 浏览数 (1)

这是《高效R语言编程》的学习笔记,前面的笔记在这里:

高效R编程

《高效R语言编程》笔记

这是《高效R语言编程》的学习笔记,前面的笔记在这里:

我们将实践、习惯、提升生产力的系统环境定义为工作流。项目管理和计划,这里使用DiagrammeR包。

高效工作流的5条高级技巧

类型

  • 1、编码前头脑清晰,保证目标,可以用纸笔
  • 2、制定计划
  • 3、尽早选择要用的包
  • 4、记录每个阶段的工作
  • 5、尽可能使流程可复制,knitr可以帮助实现

项目规划类型

  • 数据分析 重点是数据处理的速度。本人觉得是先实现呢
  • 创建包 用户接口和用户文档,代码风格和审查,鲁棒性的测试也很重要
  • 报告和发布 需要多少代码才能得到结论和会创建多少输出
  • 应用 Shiny App或者嵌入到大型服务器中的的代码,健壮性和恰当地处理错误

具体步骤

  • 项目规划,做好计划
  • 包选择
  • 发布

项目规划与管理

准备充分可以减少工作,减少技术债务(不完全正确的代码推迟决策),当然,一次性代码大可不必这样。可用的工具有从简单到复杂是,Github, Zenhub(与GitHub紧密配合,唯一的浏览器插件),类似Trello的网页工具,专用项目管理软件,企业级项目管理软件。

分而治之

模块化,项目分割。

使你的工作流更敏捷

SMART标准

  • 明确(目标)
  • 可衡量(结束指标)
  • 可实现
  • 实际情况(资源)
  • 时间限制 项目计划有多种形式,比如甘特图,问题描述等等。

通过R可视化项目计划

项目进度绘图包:

  • plan(进度图、甘特图)
  • plotrix(甘特图)
代码语言:javascript复制
install.packages("plotrix")
library(plotrix)
example(gantt.chart)
  • DiagrammeR 较新的包,提供简单流程图的R接口,如mermaid和GraphViz。
代码语言:javascript复制
 library(DiagrammeR)
 mermaid("gantt
         Section Inition
         Planning        :a1,2020-05-06,10d
         Data processing :after a1, 30d"
         )

包的选择

低效、缺乏技术支持或过时的包会浪费不少时间,CRAN上有大量不好的包,易出错。使用R包可以避免重复造轮子,提高效率。

查找R包

首先是百度谷歌一下,其次,是R文档网站rdocumentation.org,也可以R命令搜索:RSiteSearch('ggplot') #会自动用浏览器打开网页

如何选择R包

优先考虑性能、稳定性和易用性。几个推荐的判断标准:

  • 1、是否成熟,版本号1.0以上一般更稳定
  • 2、是否处于持续开发周期
  • 3、完备的文档
  • 4、是否广泛使用 MRAN和METACRAN两个网站可以帮助包的选择,下载量也是一个衡量指标。可以用这个网址查看https://cranlogs.r-pkg.org/badges/last-month/ggplot2

发布

文档化你的工作:动态报告与R包。

通过R Markdown生成动态文档

这个的优点是可以同时包括代码块和实时生成结果,示例如下:

代码语言:javascript复制
1 1

echo=TRUE,是显示R代码;eval= TRUE,执行代码。Ctrl Alt I可以方便插入代码块。在文档第一个代码块设置如下,可以缓存第一次运行结果,减少构建时间:

代码语言:javascript复制
knitr::opts_chunk$set(echo = TRUE)
opts_chunk$set(cache=TRUE)

R包

dummy package虚拟包,使用DESCRIPTION文件用于告知用户如何使用。创建包适合管理复杂项目,需要花费额外时间,devtools包让这个过程变得简单。当然,小型一次性项目还是不建议创建包。R包的基本元素区别于其他R项目,下面是三条高效建议:

  • 1、DESCRIPTION 包含了包的依赖信息,需要安装的其他包,例如Imports:
  • 2、R/ 文件夹,包的所有R代码,模块化
  • 3、data/ 文件夹包含示例代码,devtools::use_data()可以自动将数据添加到你的包,只要在包加载时配合了data("data_set_name")函数。testthat包让测试更加容易,确保进程不中断。

0 人点赞