——by不是杀杀
虽然大多数时候在Windows下和在Jupyter中能够非常方便快捷地进行R语言编程,但对于处理数据量较大的工作时,还是避免不了需要在服务器上运行我们写的代码,那么我们要如何方便快捷地将代码编写成脚本移植到服务器上运行呢?
要在服务器上运行R,首先要有R的环境。
R的安装(Debian)
sudo apt install r-base
查看安装是否成功
R --version
安装成功
有了R语言环境我们就可以编写我们的脚本了
编写脚本
可以直接将Windows下我们写好的代码拷贝到服务器上,或者用vim创建文本文件,将文件命名后缀为.R的文件。
脚本的运行
Rscript 脚本名称.R
以上是基础的R语言脚本的使用
接下来是进阶版——编写R语言工具(入门)
有时候我们写了一个函数,但是不想没错都通过修改脚本的方法修改参数(比如数据路径等),我们可以通过命令行传递参数的方法,将我们的脚本编写成一个小工具。
R语言命令行参数传递函数
- commadArgs()
R自带的函数,按顺序位置传递参数,无法编写帮助文档,用于简单脚本
- getopt()
getopt包中函数。可以输出帮助文档。
3. OptionParser()
optparse包中函数,可以自定义参数名字以及输出帮助文档,今天主要给大家介绍这个函数的用法
首先安装optparse包
install. Packages(‘optparse’)
接着在我们编写好的脚本中,写好我们的函数
假设我们的脚本名称为Afunction.R 里面有下面这样的函数
Afunction<- function(x,y){……} #这个函数有两个参数 x和y
要想将其变成方便的小工具我们需要将这个脚本变成这样:
library('optparse') #调用optpares包
option_list <- list( #构建参数列表
make_option( c("-d", "--data"), type = "character", default = FALSE, help = "输入文件"),
make_option( c("-c", "--cutoff"), type = "integer", default = 0, help = "选取阈值"),
# type为输入参数的类型,有“logical”, “integer”, “double”,“complex”, “character”这几种类型
# default为该参数的默认值,当用户没有输入该值时使用默认值,
#help为输出的帮助信息
) #有几个参数就用几个make_option
opt_parser = OptionParser(option_list=option_list) #解析参数
opt = parse_args(opt_parser) #解析参数
x1 = opt$data #将输入的-d参数传递给x
y1 = opt$cutoff #将输入的-c参数传递给y
Afunction<- function(x,y){……} #函数本身
write.table(Afunction(x1,y1),"result.csv",quote = F,col.names = T,row.names = F,sep=',') #调用函数并将结果保存成文件输出
这样我们就能直接在我们的命令行运行我们的小工具了
如在命令行中输入:
Rscript Afunction.R -d ./Data.tsv -c 9 #输入文件为Data.tsv 阈值为9
还有可以通过 -h参数输出帮助文档
Rscript Afunction.R -h #输出帮助文档
实例:最近写的一个奇怪的小脚本
一个脚本的optparse的使用部分
通过-h输出自己能看懂的帮助文档(别人能看懂那就更好了
输出的帮助文档
期间还遇到一个小问题:如何传递为数组的参数
因为没有看到type可以为数组之类的类型,所以用一个比较简单直接的方法解决:以字符串的形式按规定的格式进行输入,再通过strsplit分割,再转变为数值。