R语言入门

本文最后更新于:2023年4月16日 晚上

R语言简介

1992年由Ross Ihaka 和 Robert Gentleman发明,因此叫做R语言

R的特点:

  • 一个专注于统计分析、制图的语言
  • 免费、开源
  • 适用于多个系统(Windows、macOS、Linux)
  • 有丰富的库
  • 社区活跃

安装&环境配置

安装R语言

以Windows为例

  • https://cloud.r-project.org/下载R语言
  • 使用R studio或者vscode作为ide
  • 使用install.packages("tidyverse")语句安装宏包。其中,tydyverse是一个宏包
  • 配置环境变量,使得命令行可以识别R.exe

在vscode中配置R语言环境

安装拓展:

  1. R 扩展:提供了 R 语言的语法高亮、代码补全、调试功能等。
  2. R LSP 扩展:提供了 R 语言的 Language Server Protocol(LSP)支持,可以提供更强大的代码分析和自动补全功能。

配置 R 环境路径

  • 在 VSCode 中,按下快捷键 “Ctrl+Shift+P”(或者 “F1”),在命令面板中输入 “settings” 并选择 “Preferences: Open User Settings” 打开用户设置窗口

  • 找到 “R: Executable Path” 选项,点击编辑图标,在弹出框中输入 R 环境的路径(如 “C:\Program Files\R\R-4.0.4\bin\R.exe”),保存设置

  • 查找r.rterm。填写radian.exe的路径

安装languageserver包和httpgd包:

  • 注意要是用管理员模式下的命令行
  • 在设置中选择use httpgd
1
2
3
4
install.packages("languageserver")
install.packages("httpgd")

pip install radian

4-9更新:vscode nmsl,RStudio才是yyds

R语言语法速通

对象

R中存储的数据是对象,使用<-可以对对象赋值,变量命名需要遵循一定的规则

对象与许多属性,比如类型和长度

1
2
3
4
5
6
7
r$> data <- read.csv("yourname_sample_data.csv", header = TRUE, sep = ",")

r$> typeof(data)
[1] "list"

r$> length(data)
[1] 8

数据结构

向量

向量是R语言中的一种数据类型,是R语言中最基础的数据结构

c() 函数可以对向量进行聚合操作

1
2
3
4
5
6
7
8
9
10
11
12
#数值型向量
x <- c(3, 4, 5, 6, 7)
x <- c(3e+06, 1.23e2) # 双精度类型,科学计数法

#字符串型向量
x <- c('Alice', 'Bob', 'Charlie', 'Dave')

#因子型向量,是带有层级(Levels)的字符串向量,指定层级信息
four_seasons <- c("spring", "summer", "autumn", "winter")
four_seasons_factor <- factor(four_seasons,
levels = c("summer", "winter", "spring", "autumn")
)

矩阵

matrix() 函数创建矩阵,第一个参数是矩阵向量,第二个指定行,第三个指定列

默认是竖着排,如果想横着排就应该指定byrow = TRUE

竖着排

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

## [,1] [,2] [,3]
## [1,] 2 3 5
## [2,] 4 1 7

横着排

1
2
3
4
5
6
7
8
9
matrix(
c(2, 4, 3, 1, 5, 7),
nrow = 2,
ncol = 3,
byrow = TRUE
)
## [,1] [,2] [,3]
## [1,] 2 4 3
## [2,] 1 5 7

列表

列表(list)可以将不同的数据结构组合起来

1
2
3
4
5
list1 <- list(
a = c(5, 10),
b = c("I", "love", "R", "language", "!"),
c = c(TRUE, TRUE, FALSE, TRUE)
)

这里组合了abc,分别是数字向量、字符串向量、布尔向量

数据框

数据框(data frame)是一种特殊的列表,列表中的元素必须是等长的,很像是Excel表格

运算符

以向量Wie例

加减乘除模

两个向量的加减乘除是将相同位置的元素进行运算,以÷为例

1
2
3
4
a <- c(1, 2, 3)
b <- c(4, 5, 6)
a / b
## [1] 0.25 0.40 0.50

注意,/是除,%%是取模操作

%*%是求内积(点乘)

循环补齐

当两个向量长度不相等的时候,短的向量会循环补齐

1
2
3
4
5
6
x <- c(1, 2, 3)
y <- c(10, 20, 30, 40, 50, 60, 70)

x + y

## [1] 11 22 33 41 52 63 71

上面例子中,x会自动补齐为(1, 2, 3,1, 2, 3,1),也即是循环复制,直至与y的长度相同,之后进行运算

关系运算符

比如比较两个向量的代销关系,是否相等

逻辑运算符

与或非

冒号运算符

  • 创建整数序列,比如1:10创建1~10的整数序列

  • seq函数也可以创建序列seq(from = 1, to = 10, by = 1)

  • %in% 运算符用于判断元素是否属于向量

特殊值

  • InfInfinity,无限大
  • NaNNot a Number,比如0/0

函数

内置函数

数学函数

  • sum(): 计算向量或矩阵中所有元素的总和。
  • mean(): 计算向量或矩阵中所有元素的平均值。
  • max(): 找出向量或矩阵中的最大值。
  • min(): 找出向量或矩阵中的最小值。
  • abs(): 求一个数或一组数的绝对值。
  • sqrt(): 求一个数或一组数的平方根。
  • exp(): 求一个数或一组数的指数函数。
  • log(): 求一个数或一组数的自然对数。

数据处理函数

  • unique(): 去除向量或数据框中的重复元素。
  • sort(): 对向量进行排序。
  • order(): 对向量排序并返回排序后元素在原始向量中的下标。
  • subset(): 对数据框进行子集操作。
  • merge(): 将两个数据框按照某一列关键字合并。
  • aggregate(): 根据变量对数据框进行分组汇总。
  • table(): 统计向量或数据框中各元素的出现次数。

图形函数

  • plot(): 绘制散点图、折线图等常见统计图形。
  • hist(): 绘制直方图。
  • barplot(): 绘制条形图。
  • boxplot(): 绘制箱线图。
  • pie(): 绘制饼图。

自定义函数

1
2
3
4
5
6
7
my_divide <- function(a, b) {
if (b == 0) {
stop("Error: second parameter can't be zero!")
}
result <- a/b
return(result)
}

管道操作

管道操作符 %>% 将左侧表达式的结果作为右侧表达式的第一个参数进行传递

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 加载tidyverse包
library(tidyverse)

# 读取数据
data <- read_csv("data.csv")

# 进行数据清洗和转换
result <- data %>%
filter(year > 2010) %>% # 只保留2010年之后的数据
group_by(country) %>% # 按国家分组
summarize(avg_income = mean(income)) %>% # 计算每个国家的平均收入
arrange(desc(avg_income)) # 按照平均收入降序排列

# 查看结果
result

代码从一个CSV文件中读取数据,然后使用管道操作符对数据进行筛选、分组、汇总和排序等操作,最终得到一个按照平均收入降序排列的数据框。通过使用管道操作符,我们可以用更少的代码完成更多的工作,同时使代码更加易于理解

tidyreverse

数据清洗和转换:

  • filter() 函数:根据条件筛选数据
  • select() 函数:选择保留的列
  • mutate() 函数:新增或修改数据列
  • group_by() 函数:按照某个变量分组
  • summarize() 函数:对每个分组进行汇总计算
  • arrange() 函数:基于某个变量排序

数据可视化:

  • ggplot() 函数:创建高质量的数据可视化图形
  • geom_*() 函数:定义可视化图形的几何对象如点、线、区域等
  • aes() 函数:设置图形的映射关系,如x轴、y轴和颜色等
  • theme() 函数:调整图形的主题和外观

ggplot(grammar of graphics)

在 ggplot 中,图形是由图层 (layer) 组成的,每个图层包含以下三个部分:

  1. 数据集(data):即将要绘制的数据。
  2. 几何对象(geom):用来描述数据中每个点、线、矩形等几何元素的形状和位置。
  3. 美学映射(aesthetics):将数据中的变量映射到颜色、形状、大小等可视化属性上。

以一段代码为例

1
2
3
library(ggplot2)
ggplot(data = mtcars, aes(x = wt, y = mpg)) +
geom_point(color = "blue")
  • ggplot 函数用来创建一个基本的空白图层,其中包括了数据集和美学映射的定义

    • data:表示传入的数据集
    • aes():表示美学映射,通常是一个用逗号隔开的字符变量列表,指定了数据中的哪些变量要映射到图形属性上
  • 几何对象函数(geom_*)。有很多,比如geom_point() 用来绘制散点图,geom_line() 用来绘制线性图

  • 每个 ggplot 函数都可以通过加上各种图层来构成更加丰富的可视化效果。例如,可以使用 facet_grid() 函数为图像添加镶嵌面板、使用 scale_color_gradient() 函数来调整颜色渐变以及使用 theme() 来修改轴标签和标题的样式等。

将Rmd文件输出为PDF文件

在 R 语言中,knit 是一个用于将 RMarkdown 文档转换为纯文本或其他格式的函数。具体来说,knit 函数会读取 RMarkdown 文档中的 R 代码块,并执行这些代码块。然后,它会将执行结果(例如计算结果、图表、表格等)嵌入到 Markdown 或 LaTeX 格式的文本中,并生成最终的输出文件

要正确使用 knit 函数,你需要先安装并加载 knitr 包,可以使用 “Knit” 工具按钮调用 knit 函数,并通过设置 “Knit” 按钮下拉菜单中的选项来指定输出格式和其他选项

在 R 语言编译 rmd 文件的过程中,LaTeX 起到了将 Markdown 语法转换为 PDF 文档的作用。具体来说,当你使用 pdf_documentbeamer_presentation 等输出格式时,RMarkdown 会将源文档转换为 LaTeX 格式,并使用 LaTeX 进行编译生成最终的 PDF 输出

为了编译出PDF,需要正确设置latex的编译器,在文件开头可以加几行yaml来指定,下面指定了xelatex,xelatex可以解决不能编译出中文字符的问题。要注意下面的缩进是不能更改的(被这个卡了很久

1
2
3
4
5
6
7
8
9
10
11
12
13
---
title: "My Document"
output:
pdf_document:
latex_engine: xelatex
---

# Section 1

Some text.

​```{r}
summary(cars)

参考

https://bookdown.org/wangminjie/R4DS/index.html


R语言入门
http://gls.show/p/634ccbb5/
作者
郭佳明
发布于
2023年4月6日
许可协议