不常用R的朋友,可能并不能意识到好的编辑模板带来的长期效率提高和代码重用性,非计算机专业科研人员且需要使用R语言,此文会对您有帮助。
个人认为:是否能熟悉使用Shell(项目流程搭建)+R(数据统计与可视化)+Perl/Python等(胶水语言,数据格式转换,软件间衔接)三门语言是一位合格生物信息工程师的标准。
之前分享过我个人的《Shell语言》和《Perl语言》脚本写作模板(蓝色字为链接直达),今天再分享一下我的R语言模板,一次性解决困扰新手的众多问题,如包安装、命令行参数解析、文件读取、Anova组间统计和箱线图展示、表格和矢量图输出等。
希望对新手有所帮助!老司机尽情拍砖,指导我写出更好用、更规范的脚本。
模板主要内容
此模板主要以下分为5部分:
1. 程序功能描述和分析思路
每次写脚本,一定要写清楚程序的功能、实现的主要步骤,每个参数的详细说明和使用示例。如果英语描述不方便理解,建议中英文全写,方便自己和同行快速理解。千万要认识写清楚这些,现点养成好习惯,将来节省的时间会更多。
2. 依赖关系检查、安装和加载
R己有过万的可用包,很少需要我们开发新功能。每次需要加载需要的包,但没有会报错,直接安装又不会提醒导致重复安装浪费时间。我添加判断R包是否安装的代码,当R包缺失时会自己动从CRAN安装。对于CRAN没有的包,也提供了Bioconductor和Github安装代码,只需手动修改包名安装即可。
此步还包括加载了optparse
包后,对命令行的解析,以及在屏幕上显示参数,让用户校验是否正确。
3. 读取输入文件
R用于作图,读入最多的是制表符分割的表格。我提供了使用rnorm
生成的测试数据,并输入了测试文件,其实这种方式在程序测试、教程和实验分析对照中也是很常用的。
同时提供了read.table
读取文件,或read.table(file.choose)弹窗选择输入文件两种方式。
4. 统计与绘图
这其实才是正文部分,用户根据自己的需求编写代码分析数据,完成工作。本模板以anova组间比较,和箱线图展示为例,方法大家测试工作过程。
表1. Anova分析测试数据结果
A vs B | diff | lwr | upr | p adj |
GroupB-GroupA | 1.17 | 0.41 | 1.93 | 0.004 |
图1. 箱线图展示组间比较,且按组分配不同的颜色和形状(方便多组时区分),并添加统计p值。
5. 保存图表
分析的结果最重要的工作是保存图表,用于进一步分析和论文写作。本模板提供了输出表格的代码,并解决了存在行名输出时,文本文件在Excel中打开列名位置串一格的问题(R表输出时行/列名交叉点为空)。图片建议一律输出PDF格式,主要控制图片的长宽即可,不存辨率的问题,后期AI修改组合非常方便。杂志也更喜欢,因为他们接收后修改方便。
模板使用方法
保存文末的全部代码,推荐在Rstudio中保存文件名为template.r
,可以逐行运行学习,体会常用功能。
命令行中使用
# 方法1. 直接使用Rscript执行
Rscript template.r
# 调置输入数据文件,输出图表文件名前缀
Rscript template.r -i data_table.txt -o output
# 方法2. 添加可执行权限和环境变量
chmod +x template.r
# 链接至有权限写入的环境变量目录,如我的是~/bin/
ln `pwd`/template.r ~/bin/
# 任何地方可以直接调用此脚本
template.r -i data_table.txt -o output
程序运行结果如下:
[1] "The input file is data_table.txt"
[1] "The output file prefix is output"
[1] "The output table is output.txt"
[1] "The output figure is output.pdf"
文中把每个段落用if条件语句控制是否执行。方便读者开、关功能代码段。
用户还可根据自己的需求添加段落,再也不要为找常用语句的写法到处搜索了,有了模板,常用语句段落直接复制、修改,快速实现自己的工作!!!
模板全部代码及讲解
#!/usr/bin/env Rscript
# 1. 程序功能描述和主要步骤
# 程序功能:Anova组间统计和箱线图展示
# Anova Script functions: Calculate pvalue of groups by aov and TukeyHSD
# Main steps:
# - Reads data table input.txt
# - Calculate pvalue and save in output.txt
# - Draw boxplot and save in output.pdf
# 程序使用示例
# USAGE
# Default
# anova.r -i data_table.txt
# -o otuput filename prefix for output directory name
# 参数说明
# Options
# -i/--input 输入数据表文件 input.txt
# -o/--output 输出结果文件名前缀 output_prefix, 通常会有统计表txt和矢量图pdf
options(warn = -1)
# 2. 依赖关系检查、安装和加载
# See whether these packages exist on comp. If not, install.
package_list