Introduction to R

R是一种常用的数值计算语言,与Matlab、Python等相比较。它同样是我的一门调查课程中用于统计分析的语言。因此,我想带大家做一个关于R语言的小介绍。

Posted by Gnefil Voltexy on 2022-04-14
Estimated Reading Time 8 Minutes
Words 2k In Total
Viewed Times

R语言


什么是R语言?以及为什么要用它?

R是一种在开放源码环境下开发的语言。它是一种解释性语言,不需要用编译器编译,可以通过其交互式命令行界面(类似于Python界面)和脚本进行快速编程。

由于其直接性,它被广泛用于数据挖掘和数据分析。作为最常用的数值计算编程语言之一,它值得我们对它进行进一步的了解。

RStudio

我们几乎不可能只用命令行编程,如果我们使用的语言主要目的是为了获得数据的可视化分析,那就更不可能了。因此,使用R最常见的方式是通过Rstudio,一个开发R代码的图形用户界面软件。

rstudio_logo

当下载并进入后,它将显示4个面板(如果没有打开脚本面板,则为3个。从左上到右下,它们是

  • 脚本面板(Script):你可以在这里写一些要执行的代码块。这里一个非常有用的功能是,它允许你选择你想运行的代码行(如果不是全部的话),通过选择它们并按下运行。
  • 控制台面板(Console):交互式终端的位置。你可以在这里输入要执行的代码或使用脚本。输出,如打印输出将显示在这里。
  • 环境面板(Environment):在这里你可以看到当前存储的所有变量。
    • 这个面板的另一个有用的标签是历史(History),在这里你可以检查所有以前执行的命令。
  • 文件面板(Files):在这里你可以看到以资源管理器形式存在的文件。
    • 图像(Plots) 标签页让你看到R的图像输出。
    • 包(Package) 探索任何已安装的R包。
    • 帮助(Help) 当help(“some_command”)被调用时输出相关信息
      rstudio_4_panels

R软件包

R作为一个大社区,伴随着海量软件包的支持。用以下方法安装一个包

1
install.packages("package_name")

将软件包并入你的库中,这样你就可以使用它了。

1
library("package_name")

这些操作也可以在RStudio GUI中完成。

R脚本

很多时候,我们需要在多个情况下使用同一段代码,那么我们可以把它们存储在一个文件中。这些文件被称为R脚本。

1
2
3
4
5
6
7
8
# 这是一个计算两个数字的均方根的脚本

a <- 1 # <- 是赋值运算符
b <- 2

rms <- sqrt(a^2 + b^2) # ^是指数运算符,sqrt是平方根函数

print(rms)

加载数据

R的默认读取函数是read.table,它有局限性,只能读取人类可读式的数据文件(例如,tab分隔的,逗号分隔的)。其结果是一个data.frame对象。

1
data <- read.table(filename, header=TRUE, sep="\t")

数据结构

向量Vector

向量是一组以数组形式排列的数值,其中所有的元素都应该是同一类型。

以下是几种可以构造一个向量方法:

1
2
3
v <- c(1, 2, 3, 4, 5)
v <- 1:3 # [1, 2, 3]
v <- c("apple", "banana", "cherry") # 一个字符类型向量

从向量取出一个元素的方法:

1
2
3
v[1] # 第一个元素
v[1:3] # 前三个元素(是个向量)
v[c(1, 3, 5)] # 第一个、第三个和第五个元素,注意是以1为起始索引。

串列List

串列是一个允许多种类型的值的向量。

串列遵循与向量相同的创建和提取规则,只是每个元素也被认为是一个串列。因此:

1
2
3
4
l <- list(1, "a", TRUE, c(-1, -2, -3))

l[[2]] # 第二个元素,"a"
l[[4]][3] # 第四元素的第三个元素,-3。不要使用l[[4, 3]]

矩阵Matrix

矩阵是一个向量的向量;是一个二维向量,有一个矩形的形状。

创建一个矩阵

1
2
3
4
5
6
7
8
9
10
m <- matrix(c(1, 2, 3, 4, 5, 6), nrow=2)
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6

n <- cbind(c(8, 6, 2), c(1, 2, 3), c(2, 3, 3)) # cbind将这些向量连接成一个矩阵
[,1] [,2] [,3]
[1,] 8 1 2
[2,] 6 2 3
[3,] 2 3 3

从矩阵中提取一个元素或一个向量

1
2
3
m[1, 2] # 第一行, 第二列; 3
n[1, ] # 第一行; [8, 1, 2]
n[, 3] # 第一列; [2, 3, 3] 。

数据帧Data frame

数据帧Data frame(data frame是比较常用的单词,一下以data frame指数据帧)是R语言中最常用的数据结构。它是一个矩阵,其中每一列被认为是数据的一个属性,而每一行被认为是一个观察值。作为属性,每个列都有名称。如果没有明确声明,它们将被称为X1X2X3等。
例如,在一个调查中,每一行是一个人,每一列是可以一个问题的变量(如年龄、性别、收入)。

read.table自动将数据加载到一个data frame中。另一种创建的方法是从一个矩阵构造。

1
2
3
4
5
df <- data.frame(m)
X1 X2 X3
1 8 1 2
2 6 2 3
3 2 3 3

提取遵循与矩阵相同的规则。一个不同之处在于提取带有df[, 2]df[2]的列。注意,由于我们有每一列的名称,我们可以提取带有名称的列。

1
2
3
4
5
6
7
8
9
df[, 2] # 如果用2个坐标系取出,列就被扁平化了。
1 2 3

df[names(df) == "X2"] # 提取列X2
df[2] # 同样的效果,第二列,而不是行。
X2
1 1
2 2
3 3

Data frame中列的名称是相当重要的,下面是如何改变它们的方法:

1
2
3
4
names(df) <- c("new_name_1", "new_name_2", "new_name_3") # 改变所有名字

names(df)[1] <- "new_name_1" # 只改变第一个名字
names(df)[names(df) == "X1"] <- "new_name_1" # 只改变叫X1的列名

布尔值和掩码

数据结构可以与布尔值交互,提供过滤筛选(掩码)后的数据来进行下一步操作。

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
42
43
44
45
46
# runif(n)在0和1之间创建n个随机数
m <- cbind(runif(10), runif(10), runif(10))

[,1] [,2] [,3]
[1,] 0.16911856 0.8984747 0.10109347
[2,] 0.19173547 0.9902025 0.67376471
[3,] 0.89473736 0.3980775 0.96819965
[4,] 0.95936313 0.9812951 0.26555639
[5,] 0.31889684 0.5200781 0.35668182
[6,] 0.54475071 0.6374638 0.64514961
[7,] 0.10041832 0.1779460 0.05627609
[8,] 0.07695519 0.9616795 0.26788061
[9,] 0.88356189 0.6104990 0.10228830
[10,] 0.07814162 0.8857073 0.42943937

# 所有大于0.5的值的布尔掩码
m > 0.5
[,1] [,2] [,3]
[1,] FALSE TRUE FALSE
[2,] FALSE TRUE TRUE
[3,] TRUE FALSE TRUE
[4,] TRUE TRUE FALSE
[5,] FALSE TRUE FALSE
[6,] TRUE TRUE TRUE
[7,] FALSE FALSE FALSE
[8,] FALSE TRUE FALSE
[9,] TRUE TRUE FALSE
[10,] FALSE TRUE FALSE

# 适用于子矩阵
m[2, ] > 0.5
[1] FALSE TRUE TRUE

# 用掩码就可以实现一些常见的处理,例如将0.5和0.8之间的所有数值设置为1。操作符: 和(&),或(|),和不(!)。
m[m > 0.5 & m < 0.8] <- 1
[,1] [,2] [,3]
[1,] 0.16911856 0.8984747 0.10109347
[2,] 0.19173547 0.9902025 1.00000000
[3,] 0.89473736 0.3980775 0.96819965
[4,] 0.95936313 0.9812951 0.26555639
[5,] 0.31889684 1.0000000 0.35668182
[6,] 1.00000000 1.0000000 1.00000000
[7,] 0.10041832 0.1779460 0.05627609
[8,] 0.07695519 0.9616795 0.26788061
[9,] 0.88356189 1.0000000 0.10228830
[10,] 0.07814162 0.8857073 0.42943937

其他常见语法

R的语法很直接,一些编程时常用的功能如下。

循环

1
2
3
4
5
6
7
8
for (i in 1:10) {
print(i)
}

while (i < 10) {
print(i)
i <- i + 1
}

函数

1
2
3
4
5
if (i > 5) {
print(i)
} else {
print(i + 1)
}

Functions

1
2
3
plus_one(x) {
x + 1
}

可视化软件包

可以从ggplot2软件包开始了解。

R Markdown

R Markdown是一种简单的语法,用于以类似Markdown的格式编写R代码。

Conclusion

R是一种非常强大的语言,而且非常容易学习。这只是一篇关于其一般语法和一些最常见的语法的快速介绍性文章。下一篇R教程可能是由真正的例子,来说明如何使用它来提取想要的数据并对其进行统计分析。