R语言之基础
Contents
R语言是Ross Ihaka和Robert Gentlemanat在新西兰奥克兰大学于1996年发起的一个项目,并且由1976年贝尔实验室的S语言发展而来。目前于R语言常用于统计分析,绘图,数据挖掘。
获取R的地址:http://cran.r-project.org/,国内镜像为:https://mirrors.tuna.tsinghua.edu.cn/CRAN/。
R语言常用IDE为RStudio,下载地址为:https://rstudio.com/products/rstudio/。
1.基础
这里首先列举一些常用语法,之后解释了遇到的一些问题。
推荐的变量命名:China.City, ThisIsAFunction, i。
1.1基本运算
- 整除:
%/% - 整除取余:
%% - 索引:
[],$ - 判断元素是否在向量中,返回布尔值
%in% - 矩阵乘法:
%*% - 数学函数:
exp(), log(), log10(), sqrt() - 取整函数:四舍五入取整
round(n),向上取整ceiling(n),向下取整floor(n)。round(n,m)表示对n保留m位小数进行四舍五入。
常用语句如下:
a <- 1
b <- "aaa"
#输出
print(a) # 1
#拼接
paste(a, b) # "1 aaa"
paste(a, b, collapse=",") # "1,aaa"
paste0(a, b) # "1aaa"1.2常见疑惑
<-,<<-与=的区别
- 在大多数语言中
=作用有两个赋值和传参,但在R语言中<-的作用只有赋值并且创建对象,且该箭头方向为双向(可向右赋值->)。如果同时存在,优先据<-高于=。由于<-的可读性好,故R语言中一般使用<-。 <<-表示全局赋值,可在函数中向全局变量赋值,与<-类似,也可向右进行赋值
2.数据结构
基本常用数据类型有:数值型(numeric)、逻辑性(logical)、字符型(character)、复数型(complex)、原味型(raw)、缺省型(missing value)。
数据对象有:向量(vector)、矩阵(matrix)、数组(array)、列表(list)、数据框(data.frame)、因子(factor)。
下文是常用的代码示例:
# charactor
a <- "study"
# 分割
substr(a, 1, 2) # "st"
# 长度
nchar(a) # 5
# vector
#常用函数:length()
x <- c(1,2,3,4,5)
x <- 1:5 # 1 2 3 4 5 与 x <- seq(1,5) 等价
x <- rep(1, 5) # 1 1 1 1 1
x <- seq(1, 10, 2) # 1 3 5 7 9
# list 列表
# 创建一个列表,包含了字符串、向量和数字
list_data <- list("runoob", "google", c(11,22,33), 123, 51.23, 119.1)
# 给列表元素设置名字
names(list_data) <- c("Sites", "Numbers", "Lists")
# matrix
#常用函数:行数与列数dim(), 逆矩阵solve(), 转置矩阵t()
M <- matrix(c(3:14), nrow = 4, byrow = TRUE) #元素按行排列
N <- matrix(c(3:14), nrow = 4, byrow = FALSE) #元素按列排列
P <- matrix(c(3:14), nrow = 4, byrow = TRUE, dimnames = list(rownames, colnames)) # dimnames可以定义列名与行名
# array, matrix其实就是一个二维数组
vector1 <- c(5,9,3)
vector2 <- c(10,11,12,13,14,15)
# 创建3行3列的2维数组
result <- array(c(vector1,vector2),dim = c(3,3,2), dimnames = list(row.names,column.names,matrix.names))
# data.frame (初始化,v1与v2为其中的列)
df <- data.frame{
col1 = v1,
col2 = v2
}
#选取第一列
df[1,]
#选取第一行
df[,1]3.基本语法
R语言与Python不同,需要通过{}来进行代码块的分割,在R语言中next类似与其他语言中的continue。
代码示例如下:
# switch
# expression是一个常量表达式,可以是整数或字符串,如果是整数则返回对应的 case 位置值,如果整数不在位置的范围内则返回 NULL
# 如果是字符串,则对应的是 case 中的变量名对应的值,没有匹配则没有返回值。
# 如果匹配到多个值则返回第一个。
switch(
expression,
case1,
case2,
case3....)
#循环
for (i in 1:10) {
print(i)
}
#函数
function_name <- function(arg.1, arg.2, ...) {
expressions;
}4.高效原则
随着数据的海量增加,对于数据的处理效率能够市数据。在编程过程中通过一些简单技巧,就可以使程序的执行效率有显著的提高,
- R语言能够直接对向量进行运算,所以尽量避免使用
for循环,可以通过apply(), foreach()来等价替换。 - 在使用向量时最高能够提前分配好大小,而不是动态添加。
- 使用R语言中并行包
parallel, foreach, doParallel来处理数据。 - 通过
rm()将对象从内存中及时释放。