参考
W3C的R教程
R语言初级教程
rdocumentation
概论
R适合统计和可视化;Python适合机器学习和深度学习。
R的集成开发环境RStudio,下载找R语言初级教程(01): R编程环境的搭建
R有强大的社区支持,可以通过以下查看你需要使用的贡献包。
使用install.packages('data.table')
安装"data.table" 包
使用installed.packages()
查看已经安装的全部包
使用library(data.table)
加载"data.table" 包
使用library(help=data.table)
来查看 “data.table” 包的相关信息
使用Ctrl+L清屏
使用q退出当前的查询文档,使用q()退出交互界面
使用help(mean)
或者?mean
查询函数“mean”的用法
使用getwd()
得到当前工作目录
使用source('xx/tool.R')
在当前工作脚本中导入R脚本’tool.R’中的对象,如果在’tool.R’中有对象
dir = path.expand(dirname(sys.frame(1)$ofile))
,则在使用当前工作脚本时,可以根据dir
得到’tool.R’所在的目录
运算
算术运算
- 四则运算 +、-、*、/
- 幂指数对数 ^、exp()、log(x,base=a)或者log()或者log2()或者log10等【log是自然对数】
- 整除商%/%、余数%%
- 三角函数为弧度制cos、sin等
- 绝对值abs
- 平方根sqrt
关系运算和逻辑运算
- 比较大小:<, >, =, <=, >=, !=, ==
- 且 &,或 |,非!,异或 xor(x, y)
变量
在R语言中,使用变量前不需要声明变量的类型。变量是在赋值运算后才创建的。
变量名中包含_和.和字母(区分大小写)和数字,但是不能包括空格,并且不能以数字或者符号开头(只能以字母开头)
可以使用向左,向右和等于运算符来为变量赋值。建议使用<-为变量赋值,使用=进行传参。见你知道R中的赋值符号箭头(<-)和等号(=)的区别吗?
可以使用print()或cat()函数打印变量的值。 cat()函数将多个项目组合成连续打印输出。
a = (0:3)
b = b^Inf
print(b)
数据类型
向量
向量(vector)是R语言最基本的数据类型。向量中的元素必须为同一属性,常见的向量类型有数值型向量、字符型向量和逻辑型向量。
创建
单个数(标量)也是一个向量,只不过它的长度为1。我们可以通过is.vector()函数来验证.
print(is.vector(3)) # [1] TRUE
ages <- c(23, 26) # 数值型向量
print(ages) #[1] 23 26
nw_ages <- c(60, ages, 32)
print(class(nw_ages)) #[1] "numeric"
print(length(nw_ages)) #[1] 4
print(mean(nw_ages)) #[1] 35.25
这里的c(......)
函数(c是combine的首字母)会把它所有的参数首尾相连而形成一个向量,其中函数可以传入任意数量参数。并且参数也可以是向量。当c()函数的参数类型不同时,会强制转化成同一类型;而且每种类型的强弱不一样,强弱顺序为:character > complex > numeric > integer > logical。
另外的创建方法,如冒号,seq,rep,见R语言初级教程(10): 向量(中篇)
访问
有时你可能只需要使用向量中的某些元素,这时要用到索引。在R中,[]来指定索引,索引从位置1开始。注意:元素访问操作不会改变原向量的内容。
- 使用向量,访问多个元素
> new_ages[c(1, 3, 4)]
[1] 60 26 32
- 使用-符号进行排除输出,以及使用关系运算进行条件输出
> new_ages[-c(1,3,4)] # 排除掉1,3,4后输出
[1] 23
> new_ages[new_ages<50] # 输出小于50的值
[1] 23 26 32
- 使用冒号进行切片
> new_ages[1:3] # 输出1,2,3
[1] 60 23 26
有名称的向量的相关操作见R语言初级教程(09): 向量(上篇)
修改
使用重新赋值的方式修改,可以对整个向量赋值,也可以对部分元素赋值
ages <- 2:5
ages[1] <- 100
ages[3:4] <- c(0,0)
ages <- 20:25
向量运算
- 向量间运算是元素运算的扩展,当不匹配时,以循环方式补全长度短的向量
> a1 <- 2:3
> a1
[1] 2 3
> a2 <- 4:6
> a2
[1] 4 5 6
> a1 + a2 # a1 补全为2 3 2
[1] 6 8 8
Warning message:
In a1 + a2 :
longer object length is not a multiple of shorter object length
> a3 <- 4:7
> a1 + a3 # a1 补全为2 3 2 3
[1] 6 8 8 10
-
函数作用,相当于分别作用
-
点集,使用%*%,只对长度相同的操作,没有补全机制,输出为一个矩阵
> a1 %*% a1
[,1]
[1,] 13
常用函数
参见R语言初级教程(11): 向量(下篇),主要是统计运算和集合运算。
矩阵和数组
矩阵和数组类似于向量
列表
列表是一个R对象,它可以在其中包含许多不同类型的元素,如向量,函数甚至其中的另一个列表。
列表的基本使用
可以发现,R的列表近乎Python的有序字典,用起来很方便。
列表取值上,嵌套的话可以config$data$train
这种方式连续取值。
数据框
数据框(dataframe)是R中最常处理的数据结构。数据框由行、列构成。本身可以看成是一种特殊的列表。可以使用data.frame()函数创建数据框,也可以通过read.table()从文件中得到。
处理数据框的时候,有两点要记住:
-
虽然各列允许有不同类型:数值型向量、因子、字符型向量、日期时间向量等,但同一列的数据类型一定是相同的。
-
列名中不允许有空格出现,否则read.table()将读取失败。因此上面的变量名Field Name,Soil pH,Worm density中的空格会用.来代替。
打印
打印数据类型:print(class(a))
cat和print的差别:参考
- print只能输出一个,且默认以换行结尾,输出结果带编号
- cat可以输出多个(以逗号分隔),可以设置sep,需要显示添加换行符
文件操作
文件基本操作
无需导入包,直接操作,很方便
文件读取(网站含有在线R工具,很方便)
命令行解析
参考R optparse Args 命令行传递参数包,,总结如下。
- 加载optparse包:
library(optparse)
- 定义命令行选项列表:
option_list = list(
make_option(c('-c', '--config'), type='character', help='配置文件路径', default=NULL),
make_option(c('-o', '--out_dir'), type='character', help='输出目录', default=NULL)
)
- 定义OptionParser对象:
opt_parser = OptionParser(option_list=option_list)
- 定义解析后的(named)列表:
opt = parse_args(opt_parser)
- 取出选项值:
config = opt$config
在使用中,如果建立一个可执行文件try.R保存1-5(文件头:#!/usr/bin/env Rscript
)。如果在命令行输入:./try.R -h
会显示option使用方法,打印出make_option中的相关help信息。打印完后就退出程序。
另外还可以用函数print_help(opt_parser)
打印出同样的帮助信息,但是不会退出程序。如果要退出程序,可以使用stop("提示信息")
。
完整的代码示范:
#!/usr/bin/env Rscript
library(optparse) #加载optparse包的命名空间,并且把它放在搜索列表中,如果这个包不存在,就报错。
option_list = list(
make_option(c("-c", "--config"), type = "character", default = NULL,
help = "config file path", metavar = "character")
) # 返回OptionParserOption对象,
# 看https://www.rdocumentation.org/packages/optparse/versions/1.6.4/topics/make_option学习make_option函数的参数用法
opt_parser = OptionParser(option_list = option_list)
# 返回OptionParser对象,有默认参数usage = "usage: %prog [options]"
# 看https://www.rdocumentation.org/packages/optparse/versions/1.6.4/topics/OptionParser学习OptionParser函数
opt = parse_args(opt_parser)
# 返回list,
# 看https://www.rdocumentation.org/packages/optparse/versions/1.6.4/topics/parse_args学习parse_args函数
if (is.null(opt$config)) {
print_help(opt_parser) # print_help在library(optparse)中,打印OptionParser对象的Usage消息,但是不会退出执行
stop('The config file path is missing.') # 退出执行,并且打印提示消息
}
常用包
caret构建模型
The caret package (short for Classification And REgression Training) is a set of functions that attempt to streamline the process for creating predictive models. The package contains tools for:
- data splitting
- pre-processing
- feature selection
- model tuning using resampling
- variable importance estimation
- as well as other functionality.