目录
一、R 语言初印象

在数据的浩瀚宇宙中,R 语言宛如一颗璀璨的明星,在数据分析和统计领域占据着举足轻重的地位。它就像是一位无所不能的魔法师,能够将杂乱无章的数据,变幻成清晰、有价值的信息。无论是学术研究中的复杂统计分析,还是商业决策里的数据洞察挖掘,R 语言都以其强大的功能和丰富的扩展包,成为众多数据爱好者的得力助手。
而 R 语言 4.2.1 版本,更是在这一基础上,带来了一系列令人惊喜的改进和新特性。它修复了过往版本中的一些小瑕疵,让运行更加稳定高效;同时,新增的功能犹如为这把数据利刃开锋,使其在处理复杂数据任务时更加游刃有余。对于渴望在数据分析领域大展拳脚的你来说,掌握 R 语言 4.2.1 版本,无疑是开启数据宝藏大门的关键钥匙 ,下面就跟着我的脚步,一起走进 R 语言 4.2.1 的奇妙世界。
二、开启 R 语言 4.2.1 大门:安装与环境搭建
(一)下载与安装
- Windows 系统:
首先,打开你的浏览器,访问 R 语言的官方网站https://cran.r-project.org/ 。在这个页面中,你会看到醒目的 “Download R for Windows” 按钮,点击它,进入下载选项页面。这里提供了多个镜像站点,选择一个离你地理位置较近的镜像,这样可以加快下载速度。比如清华大学的镜像源,网速通常都很给力。点击镜像链接后,会看到 “base” 文件夹,点击进入,下载名为 “R-4.2.1-win.exe” 的安装文件 。
下载完成后,找到下载的安装文件,双击运行它。在安装向导中,一路点击 “Next”,不过在选择安装路径时,你可以根据自己的需求进行更改,如果 C 盘空间有限,就可以选择安装到其他磁盘分区 。安装过程中可能会提示你安装一些依赖项,都按照提示操作即可。等待安装完成,就可以在开始菜单中找到 R 语言的启动图标啦。
- Mac 系统:
同样,在浏览器中输入 R 语言官网地址https://cran.r-project.org/ ,点击 “Download R for (Mac) OS X” 。页面会跳转到 Mac 系统的下载页面,这里有针对不同 Mac 系统版本的安装包,根据你的系统情况选择合适的版本下载。例如,如果你使用的是最新的 macOS 系统,就选择最新的 R 语言安装包下载。
下载完成后,双击安装包,按照安装向导的提示进行操作,安装过程非常简单,基本就是一直点击 “继续”,最后输入你的系统密码完成安装。安装成功后,你可以在 “应用程序” 文件夹中找到 R 语言程序。
- Linux 系统(以 Ubuntu 为例):
对于 Linux 系统,安装 R 语言的方式和 Windows、Mac 有所不同,需要使用命令行来安装。首先打开终端,输入以下命令更新系统软件包列表:
sudo apt update
接着,添加 R 语言的软件源,输入以下命令:
sudo add-apt-repository 'deb https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/'
这里的 “focal” 是 Ubuntu 系统的版本代号,你需要根据自己的 Ubuntu 版本进行修改。添加源后,还要导入 R 语言软件源的 GPG 密钥,输入:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E084DAB9
最后,安装 R 语言,输入:
sudo apt install -y r-base
安装过程中,系统会提示你确认安装,输入 “Y” 并回车即可。安装完成后,在终端中输入 “R”,如果能进入 R 语言的交互环境,就说明安装成功啦。
(二)配置环境
- RStudio 的安装与配置:
RStudio 是一款非常强大的 R 语言集成开发环境(IDE),它大大提高了我们编写 R 代码的效率和体验。安装 RStudio 也很简单,打开浏览器,访问 RStudio 的官方下载页面https://posit.co/download/rstudio-desktop/ ,根据你的操作系统选择对应的安装包下载。比如 Windows 系统就下载 Windows 版本,Mac 系统下载 Mac 版本。
下载完成后,双击安装包进行安装,安装过程中按照提示一步步操作即可。安装完成后,打开 RStudio,你会看到一个简洁而功能强大的界面,包括代码编辑区、控制台、文件管理区等多个部分。
首次打开 RStudio 时,我们还需要进行一些基本配置。点击菜单栏中的 “Tools”,选择 “Global Options” 。在弹出的窗口中,首先设置工作目录,这是你存放 R 项目文件和数据的地方,选择一个你常用的文件夹作为工作目录。然后,在 “Packages” 选项中,设置国内的镜像源,比如清华大学的镜像,这样在安装 R 包时速度会快很多。选择好镜像源后,点击 “Apply” 保存设置。
- R 包的管理和安装:
R 包是 R 语言的一大特色,它就像是一个个功能插件,通过安装不同的 R 包,我们可以扩展 R 语言的功能。安装 R 包有多种方式,最常用的是使用install.packages()函数 。比如,我们要安装用于数据处理的dplyr包,就在 RStudio 的控制台中输入:
install.packages("dplyr")
然后按回车键,R 就会自动从镜像源下载并安装dplyr包及其依赖项。安装完成后,如果想要使用这个包,还需要在代码中使用library()函数加载它,例如:
library(dplyr)
除了从 CRAN(Comprehensive R Archive Network)官方源安装,对于一些生物信息学相关的 R 包,我们可以使用BiocManager包从 Bioconductor 源安装 。比如安装用于基因富集分析的clusterProfiler包,首先要确保安装了BiocManager包,如果没有安装,可以输入:
if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
然后使用BiocManager::install()函数安装clusterProfiler包:
BiocManager::install("clusterProfiler")
如果 R 包在 GitHub 上有开发版本,我们还可以使用devtools包从 GitHub 安装 。首先安装devtools包(如果尚未安装):
install.packages("devtools")
然后使用devtools::install_github()函数安装指定的包,例如安装ggplot2包的开发版本:
library(devtools)
devtools::install_github("hadley/ggplot2")
此外,如果前几种方法都无法安装,我们还可以手动下载 R 包的压缩文件,然后在 RStudio 中通过 “Tools” - “Install Packages” - “Install from” 选择下载的文件进行安装 。安装 R 包时,可能会遇到各种问题,比如包不可用、依赖项错误、权限问题等,遇到问题不要慌,根据错误提示去网上搜索解决方案,大部分问题都能找到解决办法。
三、R 语言基础语法大揭秘
(一)变量与数据类型
在 R 语言中,变量就像是一个个小容器,我们可以把各种数据存放在里面。R 语言拥有丰富的数据类型,每种类型都有其独特的用途。数值型数据是最常见的,比如我们要统计销售额、计算学生成绩,这些数字就可以用数值型变量来存储 。在 R 语言中,数值型又细分为双精度型(double)和整型(integer) 。例如,我们定义一个双精度型变量num1并赋值为 3.14:
num1 <- 3.14
如果想要定义一个整型变量num2,赋值为 5,需要在数字后面加上大写字母L,表示它是整型:
num2 <- 5L
字符型数据则用于存储文本信息,比如姓名、地址等。在 R 语言中,字符型数据必须用双引号(")或单引号(')括起来 。例如:
name <- "张三"
address <- '北京市海淀区'
逻辑型数据只有两个取值:TRUE(真)和FALSE(假) ,常用于条件判断。比如判断一个数是否大于 10:
x <- 15
result <- x > 10
print(result)
运行上述代码,result的值就是TRUE。
关于变量的命名,R 语言有一些规则:变量名区分大小写,像myVar和MyVar是两个不同的变量;变量名开头不能是数字和符号,像2var、@var都是不合法的;变量名中不能包含空格,但可以用点(.)或下划线(_)来连接单词,比如my_variable或my.var都是合规的 。
(二)运算符与表达式
R 语言中的运算符丰富多样,就像一套精密的工具,帮助我们对数据进行各种操作。算术运算符是最基础的,包括加(+)、减(-)、乘(*)、除(/)、求余(%%)、求模数(%/%)和求指数幂(^) 。例如,计算两个数的和:
a <- 5
b <- 3
sum <- a + b
print(sum)
这里sum的值就是 8。再比如计算 3 的 4 次方:
result <- 3^4
print(result)
运行后result的值为 81。
逻辑运算符用于逻辑判断,包括逻辑与(&&和&)、逻辑或(||和|)、逻辑非(!) 。&&和||只考虑向量的第一个元素,而&和|会对向量的每个元素进行操作 。比如判断一个数是否大于 5 且小于 10:
x <- 7
result <- x > 5 && x < 10
print(result)
result的值为TRUE。
比较运算符用于比较两个值的大小关系,返回逻辑值,有大于(>)、小于(<)、等于(==)、小于或等于(<=)、大于或等于(>=)、不等于(!=) 。例如判断两个数是否相等:
a <- 5
b <- 5
equal <- a == b
print(equal)
equal的值为TRUE。
将运算符和变量、常量组合起来,就构成了表达式。R 语言会按照运算符的优先级对表达式进行运算,比如先乘除后加减 。如果不确定运算顺序,可以使用括号(())来明确优先级 。例如:
result <- (3 + 5) * 2
print(result)
这里先计算括号内的加法,再进行乘法,result的值为 16。
(三)控制结构
在 R 语言的编程世界里,控制结构就像是交通指挥员,决定着代码的执行流程。条件语句if - else是最常用的控制结构之一,它可以根据条件的真假来执行不同的代码块 。其基本语法如下:
if (条件) {
# 条件为TRUE时执行的代码
} else {
# 条件为FALSE时执行的代码
}
比如判断一个学生的成绩是否及格:
score <- 75
if (score >= 60) {
print("及格")
} else {
print("不及格")
}
由于score的值为 75,大于等于 60,所以会输出 “及格”。如果需要处理多个条件,可以使用else if 。例如根据不同的成绩区间给出对应的等级:
score <- 85
if (score >= 90) {
grade <- "A"
} else if (score >= 80) {
grade <- "B"
} else if (score >= 70) {
grade <- "C"
} else if (score >= 60) {
grade <- "D"
} else {
grade <- "F"
}
print(paste("你的成绩等级是:", grade))
这段代码中,会根据score的值依次判断,最终grade会被赋值为对应的等级。
循环语句则用于重复执行一段代码。for循环常用于已知迭代次数的情况,语法为for (变量 in 序列) { 执行的语句 } 。例如遍历一个向量中的每个元素并打印:
vec <- c(1, 2, 3, 4, 5)
for (i in vec) {
print(i)
}
这段代码会依次打印向量vec中的每个元素。
while循环则在条件为TRUE时重复执行代码块,语法是while (条件) { 执行的语句 } 。比如计算 1 到 10 的累加和:
sum <- 0
i <- 1
while (i <= 10) {
sum <- sum + i
i <- i + 1
}
print(sum)
这里while循环会不断执行,直到i大于 10,最终sum的值为 55。
四、数据处理与分析实战
(一)数据读取与写入
在 R 语言的数据分析旅程中,数据的读取与写入是我们与数据交互的基础环节。就像厨师需要食材才能烹饪出美味佳肴,我们首先得把数据 “拿进来”,分析完成后还可能需要将结果 “存出去” 。
读取 CSV 文件是非常常见的操作,R 语言提供了read.csv()函数 。假设我们有一个名为 “sales_data.csv” 的销售数据文件,存放在当前工作目录下,想要读取它,只需在 RStudio 的控制台或脚本中输入:
sales_data <- read.csv("sales_data.csv")
这样,“sales_data.csv” 中的数据就被读取到了一个名为sales_data的数据框中,我们可以通过head(sales_data)查看数据的前几行,使用str(sales_data)了解数据的结构 。如果 CSV 文件中的分隔符不是逗号,比如是制表符(\t),可以使用read.table()函数,并指定分隔符sep = "\t" ,例如:
data <- read.table("data.txt", header = TRUE, sep = "\t")
这里header = TRUE表示文件的第一行是列名。
读取 Excel 文件时,我们需要借助一些强大的 R 包。readxl包是个不错的选择,它能轻松读取.xls和.xlsx格式的文件 。首先要确保安装并加载了这个包:
install.packages("readxl")
library(readxl)
然后使用read_excel()函数读取文件,假设 Excel 文件名为 “products.xlsx”:
products_data <- read_excel("products.xlsx")
如果 Excel 文件中有多个工作表,想要读取特定的工作表,比如 “Sheet2”,可以这样操作:
products_data_sheet2 <- read_excel("products.xlsx", sheet = "Sheet2")
数据写入同样重要。当我们对数据进行处理和分析后,可能需要将结果保存下来。使用write.csv()函数可以将数据框写入 CSV 文件 。比如我们对sales_data数据框进行了一些处理,想要将处理后的结果保存为 “new_sales_data.csv”,代码如下:
write.csv(sales_data, "new_sales_data.csv", row.names = FALSE)
这里row.names = FALSE表示不将数据框的行名写入文件。如果要将数据写入 Excel 文件,openxlsx包能派上用场 。先安装并加载它:
install.packages("openxlsx")
library(openxlsx)
然后使用write.xlsx()函数,假设要将products_data数据框写入 “new_products.xlsx”:
write.xlsx(products_data, "new_products.xlsx")
(二)数据清洗与预处理
现实世界中的数据往往是 “脏” 的,存在各种问题,数据清洗与预处理就像是给数据做一次全面的 “清洁” 和 “整理”,让数据变得干净、整齐,为后续的分析打下坚实的基础 。
缺失值是数据中常见的问题,比如在调查数据中,可能有些受访者没有回答某些问题,就会导致数据缺失 。在 R 语言中,缺失值通常用NA表示 。检测数据集中的缺失值,可以使用is.na()函数 。例如,我们有一个数据框data,想要查看其中哪些值是缺失的,可以这样做:
missing_values <- is.na(data)
missing_values是一个与data结构相同的逻辑矩阵,其中TRUE表示对应位置的值是缺失的,FALSE表示不是缺失值 。要计算缺失值的数量,可以使用sum()函数,比如计算整个数据框的缺失值数量:
total_missing <- sum(is.na(data))
处理缺失值有多种方法。如果缺失值较少,直接删除含有缺失值的行是一种简单的办法,使用na.omit()函数即可 。例如:
cleaned_data <- na.omit(data)
但这种方法可能会丢失一些数据,如果数据珍贵,就不太适用。对于数值型数据,还可以用均值、中位数等统计量来填补缺失值 。比如用均值填补data数据框中数值型变量的缺失值:
for (col in names(data)) {
if (is.numeric(data[[col]])) {
mean_value <- mean(data[[col]], na.rm = TRUE)
data[[col]][is.na(data[[col]])] <- mean_value
}
}
这段代码遍历数据框的每一列,对于数值型列,计算其均值,然后用均值填补该列的缺失值。
异常值也是数据中的 “捣乱分子”,它们可能是由于数据录入错误、测量误差等原因产生的 。识别数值型数据的异常值,常用的方法是通过箱线图,箱线图中的 “胡须” 表示数据的正常范围,超出 “胡须” 范围的点可能就是异常值 。使用boxplot()函数绘制箱线图,例如:
boxplot(data$sales)
这里假设data数据框中有一个名为sales的数值型变量 。如果发现了异常值,处理方法有很多,比如可以将异常值替换为合理的值,或者直接删除含有异常值的记录 。比如将sales变量中大于某个阈值(如第 95 百分位数)的值替换为第 95 百分位数的值:
quantile_value <- quantile(data$sales, 0.95)
data$sales[data$sales > quantile_value] <- quantile_value
数据转换也是预处理的重要环节,常见的有数据标准化,将数据转换为均值为 0,标准差为 1 的标准正态分布 。使用scale()函数可以实现,例如对data数据框中的数值型变量进行标准化:
for (col in names(data)) {
if (is.numeric(data[[col]])) {
data[[col]] <- scale(data[[col]])
}
}
在数据分析中,有时我们需要将多个数据集合并在一起,这就用到了数据合并操作 。如果数据集的列结构相同,想要按行合并,可以使用rbind()函数 。假设有两个数据框data1和data2,它们列结构一致,进行行合并:
combined_data <- rbind(data1, data2)
如果想要按列合并,数据集的行结构得相同,使用cbind()函数 ,例如:
merged_data <- cbind(data1, data2)
当数据的结构不符合分析需求时,还需要进行数据重塑 。tidyr包提供了强大的数据重塑功能,其中gather()函数可以将数据从宽格式转换为长格式 。假设我们有一个宽格式的数据框wide_data,包含id、var1、var2等列,想要将其转换为长格式:
library(tidyr)
long_data <- gather(wide_data, key = "variable", value = "value", -id)
这里-id表示除了id列,其他列都参与转换,转换后新增variable列表示原来的列名,value列表示对应的值 。spread()函数则相反,能将长格式数据转换为宽格式 。
(三)描述性统计分析
描述性统计分析是我们认识数据的第一步,就像初次见面时的自我介绍,它能让我们快速了解数据的基本特征 。在 R 语言中,计算数据的均值、中位数、标准差等描述性统计量非常方便 。
对于数值型数据,计算均值使用mean()函数 。比如我们有一个数值向量nums,计算其均值:
nums <- c(1, 2, 3, 4, 5)
mean_value <- mean(nums)
mean_value就是nums的均值 。计算中位数用median()函数 :
median_value <- median(nums)
标准差衡量数据的离散程度,使用sd()函数计算 :
sd_value <- sd(nums)
如果我们有一个数据框data,想要对其中的数值型变量一次性计算多个描述性统计量,可以使用sapply()函数结合相应的统计函数 。例如计算data中col1和col2列的均值、中位数和标准差:
stats <- sapply(data[, c("col1", "col2")], function(x) {
c(Mean = mean(x), Median = median(x), SD = sd(x))
})
stats是一个矩阵,包含了col1和col2列的均值、中位数和标准差 。对于分类变量,我们通常关注其频数分布,使用table()函数可以得到每个类别出现的次数 。假设data数据框中有一个名为category的分类变量:
category_table <- table(data$category)
category_table是一个频数表,展示了category变量每个类别的频数 。如果想要得到每个类别的频率,可以使用prop.table()函数 :
category_prop <- prop.table(category_table)
category_prop就是每个类别的频率 。描述性统计分析还可以通过可视化来更直观地展示数据分布,比如用hist()函数绘制直方图,展示数值型数据的分布情况 :
hist(data$col1)
这里绘制了data数据框中col1列的直方图 。使用boxplot()函数绘制箱线图,可以展示数据的四分位数范围以及异常值 :
boxplot(data$col1)
五、数据可视化:让数据 “说话”
数据可视化就像是数据的 “代言人”,它能将枯燥的数据转化为直观、生动的图表,让我们一眼就能洞察数据背后的信息 。在 R 语言中,数据可视化的能力十分强大,有基础绘图和更高级的绘图包可供选择。
(一)基础绘图
R 语言中基础绘图函数简单易用,是我们进行数据可视化的 “先锋军”。其中,plot()函数是最常用的基础绘图函数之一,它就像一个万能的 “画家”,能绘制多种类型的图形 。
要绘制简单的散点图,只需提供两个数值向量作为横纵坐标的数据 。比如我们有一组学生的数学成绩和语文成绩数据,想要看看两者之间的关系,就可以用plot()函数绘制散点图 。假设数学成绩存储在math_score向量中,语文成绩存储在chinese_score向量中:
math_score <- c(85, 90, 78, 88, 95)
chinese_score <- c(80, 85, 75, 82, 90)
plot(math_score, chinese_score, main = "数学成绩与语文成绩关系散点图", xlab = "数学成绩", ylab = "语文成绩", pch = 19, col = "blue")
在这段代码中,main参数设置了图形的标题,xlab和ylab分别设置了 X 轴和 Y 轴的标签,pch参数指定了点的形状(19 表示实心圆点),col参数设置了点的颜色为蓝色 。运行这段代码,就能得到一个直观展示数学成绩和语文成绩关系的散点图,从图中我们可以大致看出两者之间是否存在某种趋势。
如果想要绘制折线图,比如展示某个城市一年中每月的平均气温变化,就可以通过设置plot()函数的type参数为"l"(代表 line,即线)来实现 。假设每月平均气温存储在temperature向量中,月份存储在months向量中:
months <- c("1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月")
temperature <- c(5, 8, 12, 18, 22, 28, 30, 29, 25, 18, 12, 8)
plot(months, temperature, type = "l", main = "某城市一年月平均气温变化折线图", xlab = "月份", ylab = "平均气温(℃)", col = "red", lwd = 2)
这里lwd参数设置了线的宽度为 2,让折线更明显 。运行代码后,就能看到一条清晰展示气温随月份变化的折线图,通过折线的起伏,我们能直观感受到气温的升降趋势 。除了plot()函数,R 语言还有一些其他基础绘图函数,比如lines()函数可以在已有图形上添加线,points()函数可以添加点,abline()函数可以添加给定斜率的线等,它们相互配合,能帮助我们绘制出更丰富的图形 。
(二)ggplot2 绘图
虽然基础绘图函数能满足一些简单的绘图需求,但如果想要绘制更加精美、复杂的统计图表,ggplot2绘图包绝对是你的 “得力助手” 。ggplot2包基于一种独特的图形语法,它就像搭建积木一样,通过将数据、映射、几何对象、标度、坐标系统等组件层层组合,让我们能够轻松创建出各种令人惊艳的可视化图表 。
要使用ggplot2包,首先得安装并加载它:
install.packages("ggplot2")
library(ggplot2)
以绘制汽车数据集中车重和耗油量关系的散点图为例,假设我们使用ggplot2包自带的mtcars数据集 。首先创建一个基础图形对象,并设置美学映射,将车重变量wt映射到 X 轴,耗油量变量mpg映射到 Y 轴 :
p <- ggplot(data = mtcars, mapping = aes(x = wt, y = mpg))
此时p只是一个定义了数据和映射关系的基础图形对象,还没有实际的图形展示 。接下来,使用geom_point()函数添加散点图层,就能得到散点图 :
p + geom_point()
这简单的两行代码,就绘制出了一个展示车重和耗油量关系的散点图 。而且ggplot2的强大之处不止于此,我们还可以轻松地将其他变量映射到图形的颜色、大小、形状等属性上,让图表传达更多信息 。比如,为了展示不同气缸数的汽车车重和耗油量的关系,可以将气缸数变量cyl映射为颜色 :
p + geom_point(aes(color = factor(cyl)))
这里factor(cyl)将cyl变量转换为因子类型,以便ggplot2将其作为分类变量处理,不同的气缸数会用不同的颜色在散点图中表示出来 。
如果想要对原始数据进行某种归纳后作图,比如用平滑曲线拟合散点,展示数据的趋势,使用geom_smooth()函数即可 :
p + geom_point() + geom_smooth()
geom_smooth()函数默认使用局部加权回归(LOESS)方法拟合曲线,如果想要使用其他方法,比如线性回归,可以设置method参数为"lm" :
p + geom_point() + geom_smooth(method = "lm")
ggplot2包中还有很多其他几何对象函数,像geom_bar()用于绘制柱状图,geom_histogram()用于绘制直方图,geom_boxplot()用于绘制箱线图等,通过不同的组合和参数设置,能绘制出各种各样的统计图表 。例如,绘制一个展示不同品牌汽车销量的柱状图,假设数据存储在car_sales数据框中,包含brand(品牌)和sales(销量)两个变量 :
car_sales <- data.frame(
brand = c("Toyota", "Honda", "Ford", "Nissan"),
sales = c(200, 150, 180, 120)
)
ggplot(data = car_sales, aes(x = brand, y = sales)) +
geom_bar(stat = "identity", fill = "steelblue")
这里stat = "identity"表示直接使用数据中的值绘制柱状图,fill参数设置了柱子的颜色为钢蓝色 。
除了几何对象,ggplot2还提供了丰富的标度函数,用于控制图形的颜色、点的大小和形状等细节,就像给图表进行 “精装修” 。例如,使用scale_color_manual()函数手动设置颜色,用scale_size()函数调整点的大小 。同时,通过theme()函数可以设置图表的主题,改变背景颜色、字体、网格线等外观,让图表更加美观专业 。比如设置一个简洁的黑白主题 :
p + geom_point(aes(color = factor(cyl))) +
scale_color_manual(values = c("red", "green", "blue")) +
theme_bw()
这里scale_color_manual()函数将不同气缸数对应的颜色手动设置为红色、绿色和蓝色,theme_bw()函数应用了黑白主题 。
ggplot2包还支持分面绘图,也就是将整个数据按照某一个或几个分类变量分成多个子集,然后用这些子集分别作图,便于对比不同组的数据 。例如,将前面车重和耗油量的散点图按照传动方式变量am进行分面展示 :
ggplot(data = mtcars, aes(x = wt, y = mpg)) +
geom_point() +
facet_grid(~ am)
facet_grid()函数中~ am表示按照am变量的不同水平进行分面,生成的图表会在不同的子图中展示不同传动方式下车重和耗油量的关系 。
六、R 语言进阶:函数与包的使用
(一)自定义函数
在 R 语言的编程世界里,自定义函数是提升代码效率和可维护性的强大工具。它就像是一个精心打造的 “黑匣子”,你输入特定的数据,它就能按照预设的规则输出你想要的结果 。
定义一个自定义函数,首先要使用function关键字 。比如我们想要定义一个计算两个数乘积的函数multiply,它接受两个参数a和b :
multiply <- function(a, b) {
result <- a * b
return(result)
}
在这个函数中,a和b是函数的参数,它们就像是函数的 “原料入口”,可以接收外部传入的值 。函数体中的result <- a * b是具体的计算逻辑,用于计算两个数的乘积 。return(result)则是将计算结果返回,就像把 “成品” 从 “黑匣子” 中输出 。当我们需要使用这个函数时,只需要调用它并传入相应的参数即可 :
product <- multiply(3, 5)
print(product)
这里multiply(3, 5)就是调用multiply函数,将 3 和 5 作为参数传入,函数计算后返回结果 15,再将结果赋值给product变量,最后打印出product的值 。
有时候,函数的某些参数可能有常用的默认值,我们可以在定义函数时为这些参数设置默认值 。比如定义一个打招呼的函数greet,如果没有特别指定打招呼的方式,就默认用 “Hello” :
greet <- function(name, greeting = "Hello") {
message <- paste(greeting, name)
return(message)
}
调用这个函数时,如果只传入name参数,它就会使用默认的greeting值 :
greeting1 <- greet("Tom")
print(greeting1)
输出结果为 “Hello Tom” 。如果我们想要用其他方式打招呼,也可以传入greeting参数 :
greeting2 <- greet("Jerry", "Hi")
print(greeting2)
这时候输出结果就是 “Hi Jerry” 。通过设置默认参数,我们的函数使用起来更加灵活方便 。
(二)常用 R 包介绍
R 语言的强大之处很大程度上源于其丰富的扩展包,这些包就像是一个个功能插件,为 R 语言赋予了各种各样的超能力 。下面就来介绍几个在数据分析和统计建模中常用的 R 包 。
- dplyr:dplyr 是数据处理领域的 “超级武器”,它提供了一系列简洁、高效的数据操作函数,让数据处理变得轻松愉快 。比如filter()函数用于筛选数据,select()函数用于选择列,mutate()函数用于创建新列或修改现有列,summarise()函数用于数据汇总,group_by()函数用于分组 。这些函数通常与管道操作符%>%配合使用,让代码更加简洁易读 。假设我们有一个包含学生成绩的数据框students,想要筛选出数学成绩大于 90 分的学生,并计算他们的平均语文成绩 :
library(dplyr)
students <- data.frame(
name = c("Alice", "Bob", "Charlie", "David"),
math = c(95, 88, 92, 85),
chinese = c(88, 90, 85, 92)
)
result <- students %>%
filter(math > 90) %>%
summarise(avg_chinese = mean(chinese))
print(result)
这段代码中,students数据框通过管道%>%依次经过filter()函数筛选出数学成绩大于 90 分的行,再经过summarise()函数计算这些学生的平均语文成绩 。
- tidyr:tidyr 主要用于数据整理,将数据转换为 “整洁” 的格式,方便后续分析 。它的pivot_longer()函数可以将宽格式数据转换为长格式,pivot_wider()函数则相反 。比如我们有一个宽格式的数据框wide_data,包含学生的姓名、语文成绩和数学成绩 :
wide_data <- data.frame(
name = c("Alice", "Bob"),
chinese = c(88, 90),
math = c(95, 88)
)
使用pivot_longer()函数将其转换为长格式 :
library(tidyr)
long_data <- wide_data %>%
pivot_longer(cols = c(chinese, math), names_to = "subject", values_to = "score")
print(long_data)
转换后的数据框long_data中,新增了subject列表示科目,score列表示对应的成绩 。
- caret:caret 包是机器学习领域的得力助手,它提供了统一的接口来训练模型、进行特征选择等 。以使用决策树模型对鸢尾花数据集进行分类为例 :
library(caret)
data(iris)
set.seed(123)
training_rows <- createDataPartition(iris$Species, p = 0.8, list = FALSE)
train_data <- iris[training_rows, ]
test_data <- iris[-training_rows, ]
model <- train(Species ~ ., data = train_data, method = "rpart")
print(model)
这段代码中,首先加载caret包和鸢尾花数据集 。然后使用createDataPartition()函数将数据集划分为训练集和测试集,其中训练集占 80% 。接着使用train()函数训练决策树模型,Species ~ .表示以Species为因变量,其他所有变量为自变量,method = "rpart"指定使用决策树算法 。最后打印出训练好的模型 。
七、总结与展望
到这里,关于 R 语言 4.2.1 版本的基础使用教程就接近尾声啦!通过这篇文章,我们一起开启了 R 语言 4.2.1 的大门,从安装与环境搭建,到深入学习基础语法、数据处理分析、数据可视化以及函数和包的使用,一步步领略了 R 语言在数据分析领域的强大魅力 。
我们学会了如何在不同操作系统上安装 R 语言和 RStudio,配置高效的编程环境,以及管理和安装丰富多样的 R 包,为后续的数据分析工作打下了坚实基础 。在基础语法部分,掌握了变量与数据类型、运算符与表达式、控制结构等核心知识,这些就像是搭建房子的砖块,是构建复杂 R 语言程序的基石 。
数据处理与分析实战环节,我们学会了读取和写入各种格式的数据文件,对数据进行清洗和预处理,去除数据中的 “杂质”,让数据变得干净可用 。通过描述性统计分析,快速了解数据的基本特征,为进一步深入分析提供线索 。数据可视化部分,我们先用基础绘图函数绘制简单的图形,又借助ggplot2包绘制出精美的统计图表,让数据以直观、生动的方式 “说话”,帮助我们更好地理解和传达数据中的信息 。最后,学习了自定义函数,提高代码的复用性和效率,还认识了dplyr、tidyr、caret等常用 R 包,它们极大地扩展了 R 语言的功能,让我们在数据分析和统计建模的道路上更加得心应手 。
R 语言的应用场景极为广泛,在生物信息学领域,它助力科研人员分析基因表达数据、DNA 测序数据等,探索生命的奥秘 ;在金融领域,能进行量化分析,如时间序列分析、资产定价模型、风险管理等,为投资决策提供数据支持 ;在市场调研中,可对调查数据进行处理和分析,洞察消费者行为和市场趋势 。
希望大家通过这篇教程,对 R 语言 4.2.1 有了初步的认识和掌握。但这只是 R 语言世界的冰山一角,它还有更多强大的功能和丰富的应用等待你去探索 。如果你想更深入地学习 R 语言,建议多阅读官方文档和相关书籍,参与线上线下的学习社区,与其他 R 语言爱好者交流经验 。同时,不断地实践,将 R 语言应用到实际的数据项目中,在实践中积累经验,提升自己的技能 。相信在不久的将来,你也能成为 R 语言高手,用 R 语言挖掘数据中的无限价值 !
1087

被折叠的 条评论
为什么被折叠?



