||
R编程的一些规则与建议
使用R软件进行统计分析, 必须要接触R脚本. R脚本是保存了R代码的文本文件, 一般以.R为扩展名.
要高效得进行代码的编写和调试, 需要一个好的编辑器或者好的编程环境. 当然, 每个人都可以使用最简单的文本编辑, 如Windows Notepad 或者Rgui所提供的文本编辑工具, 但是要避免使用MS word等文档编辑器编辑R脚本.
编辑器最好能符合以下要求:
1. 等宽字体, 如Consolas, Courier New 等, Consolas配合微软雅黑字体是不错的选择.
2. 代码高亮显示, 意思是对字符串, 数字, 以及语言的关键词, 以及注释部分 分别用不同颜色显示出来.
3. 括号配对, 小括号, 中括号以及花括号成对匹配时同时高亮显示.
4. 提供良好的 正则表达式匹配, 以及特殊字符匹配, 如针对 n, t, r等特殊字符的匹配, 以及替换.
5. 列模式, 即同时对多个列进行输入, 或者编辑.
6. 编码转换工具, 如UTF-8编码转ASCII, GBK18030, BIG5等等.
7. 大小写转换工具
8. 快速运行功能, 如一键运行代码.
9. 显示行号
10. 具有导出为html功能或者Latex, 或RTF等功能
11. 字体大小能够灵活控制, 一般通过按住Contrl并转动鼠标滚轮, 即可调整显示字体的大小.
在众多的编辑器中, 符合这种要求的恐怕不是很多. 目前比较理想的, Windows下是Notepad++, Linux下则是Geany, MacOS下的编辑器则不太了解. 试用过gedit, Kate, 它们都提供了R的高亮, 但是似乎还是不够灵活. 甚至Rstudio这样专门为R设计的IDE, 还是有很多功能没有实现, 所以并不能让人十分满意.
说到编程习惯, 难免老生常谈. 例如, 什么要缩进, 要提供详细的注释等等. 这和其他编程语言并无区别. 然而R毕竟还是有自己的特点, 所以这里还是列出来一些经验:
在开始分析前, 一定要先简要查看数据的分布, 以确定所选择的统计方法. 在开始编写函数前, 应该对要数据的数据格式, 以及输出的数据有清楚的理解.
1. 所有的R脚本, 以应R作为扩展名, 这样编辑器打开时能够默认是R语言的高亮, 从而节省选择语言高亮的时间.
2. R脚本建议以 #### 开头, 然后写清楚 该脚本的标题, 作者, 日期, 联系方式等, 这样, 日后查看脚本这部分注释代码, 有很好的参考作用.
3. 第一句写 setwd(), 指定工作目录. 任何一个任务, 都应该单独创建一个文件夹, 其中放数据, R脚本, 以及运行的结果等
4. 随后是加载该脚本需要用到的程序包 如 library(vegan), 每一行只加载一个程序包, 直到所有用到的程序包全部加载.
5. 脚本中定义的函数要在加载程序包之后立即定义.
6. 如果数据是保存在xls文件中的, 每个xls文件只保存一个data_sheet. xls文件尽量保存为csv文件, 再读取, 不要保存为txt文件, 因为read.csv()比read.table()要稳定很多. 如果数据是保存在xlsx文件中的, 尽量用 openxlsx程序包所提供的函数read.xlsx()读取数据.
7. 变量的名称要具体,并且只用ASCII码字母, 要避免A,B,C,D,X等类似的变量名. 变量命名时, 尽量不要大小写混搭, 不同部分用下划线_分隔. 理想状态是, 即使不看注释, 只看变量的名称, 也可以知道变量的意义.
8. 算法的关键部分, 要注释, 特别容易出错的地方也要注释. 但是注释不能滥用. 数据处理的名称, 还应该通过变量名体现出来.
9. 缩写的函数要尽量简单明确, 以方便维护.
10. 写函数时要善用 warning, stop等处理异常的函数, 以便规范数据输入.
11. 要尽量学会 git, 以记录所有关键的更改.
12. 一个R脚本, 拷贝到R console运行时, 应该能够全部自动运行, 中间不能再要求手动输入参数.
13. 保存R生成的图像, 应该尽量用 tiff函数和dev.off()配合. 不要再用手动保存的方法.
14. 生成R程序包骨架时, 用 package.skeletons(), 然后分别编写Rd的函数帮助文件. 很多投机取巧的办法编写R程序包只能让问题更加复杂.
15. 为了简化绘图编程, 应该尽快掌握ggplot2程序包.
16. 为了克服计算瓶颈, 应该学会C或者FORTRAN语言, 也可以运用Rcpp结合C++, 并用R调用
17. 及时注意R的更新, 参考如 https://github.com/qinwf/awesome-R 以及CRAN Task Views的动态.
张金龙
2016年2月1日
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-7 08:21
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社