Contents

R语言之基础

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位小数进行四舍五入。

常用语句如下:

1
2
3
4
5
6
7
8
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)。

下文是常用的代码示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 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

代码示例如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# 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.高效原则

随着数据的海量增加,对于数据的处理效率能够市数据。在编程过程中通过一些简单技巧,就可以使程序的执行效率有显著的提高,

  1. R语言能够直接对向量进行运算,所以尽量避免使用for循环,可以通过apply(), foreach()来等价替换。
  2. 在使用向量时最高能够提前分配好大小,而不是动态添加。
  3. 使用R语言中并行包parallel, foreach, doParallel来处理数据。
  4. 通过 rm() 将对象从内存中及时释放。

5.参考

  1. https://zh.wikipedia.org/wiki/R%E8%AF%AD%E8%A8%80
  2. https://zhuanlan.zhihu.com/p/27339301
  3. https://www.runoob.com/r/r-tutorial.html