R语言是一种专为统计计算和数据分析设计的编程语言和软件环境,广泛用于数据科学、统计建模、数据可视化、机器学习等领域。(事实上,除了极少领域,R已经被Python全方位替代了🤣)
R几乎是和Python一样简单明了,下面列举以下R语言的代码特殊地方,使一个使用其他语言编程的人可以快速读懂R语言代码:
基本
赋值符号
- R的独特之处:R中常用
<-
来表示赋值,虽然=
也可以用,但<-
更常见。 - 示例:
1
2x <- 10 # 使用<- 赋值
y = 20 # 使用= 赋值 - 其他语言对比:其他语言通常使用
=
进行赋值。
索引从1开始
R的独特之处:R的向量、数组和矩阵索引从1开始。
示例:
1
2x <- c(10, 20, 30)
print(x[1]) # 输出: 10其他语言对比:像C、Python、Java等大多数编程语言的数组索引是从0开始的。
负数索引
R中的索引不仅可以使用正数,还可以使用负数。负数索引用于排除某些元素,即返回除了被负数索引的元素以外的所有元素。
用法:当你想从一个向量或数据框中排除某个元素时,可以使用负数索引。
示例:
1
2
3r复制代码x <- c(10, 20, 30, 40, 50)
print(x[-2]) # 输出: 10 30 40 50,排除了第2个元素20
print(x[-c(1, 3)]) # 输出: 20 40 50,排除了第1和第3个元素说明:负数索引告诉R排除指定位置的元素,与其他编程语言不同,R中没有直接的删除操作,而是通过负数索引实现过滤。在Python中负数索引倒数。
函数定义与返回值
- R的独特之处:R中的函数通过
function
关键字定义,且函数中的最后一行表达式会自动返回值,也可以使用return()
明确返回值。 - 示例:
1
2
3
4
5my_function <- function(x) {
y <- x * 2
y # 自动返回最后一行的结果
}
print(my_function(5)) # 输出: 10 - 其他语言对比:其他语言通常需要显式使用
return
语句返回值。
缺失值和逻辑运算
- R的独特之处:R使用
NA
表示缺失值,不能直接用逻辑运算符比较NA
,需要使用is.na()
函数来检查。 - 示例:
1
2x <- c(1, 2, NA, 4)
print(is.na(x)) # 输出: FALSE FALSE TRUE FALSE - 其他语言对比:在其他语言中,可能会使用
null
或None
来表示缺失值。
数据类型的灵活转换
R的独特之处:R自动执行数据类型转换,例如在计算中数字和字符之间的转换。某些情况可能会导致意外的行为。
示例:
1
2x <- c(1, "text", 3)
print(x) # 输出: "1" "text" "3"(都被转换为字符类型)其他语言对比:许多语言需要明确指定类型转换。
向量与列表的区别
R的独特之处:R中向量必须是同类型的,而列表可以包含不同类型的数据。
示例:
1
2v <- c(1, 2, 3) # 向量
l <- list(1, "text", TRUE) # 列表
管道操作符 %>%
管道操作符 %>%
来自 magrittr
包,被广泛用于 dplyr
等包中。它用于将左侧表达式的结果作为右侧函数的输入,从而可以简化代码的结构,提升可读性。
用法:将一个表达式的输出直接传递给下一个函数作为输入,避免嵌套多层函数调用。
示例:
1
2
3
4
5
6
7
8
9library(dplyr)
data <- data.frame(x = 1:5, y = 6:10)
# 不使用管道操作符
result <- arrange(filter(data, x > 2), desc(y))
# 使用管道操作符
result <- data %>%
filter(x > 2) %>%
arrange(desc(y))
print(result)说明:管道操作符
%>%
可以避免嵌套函数调用,让代码更清晰直观。它通过将前面的结果传递给下一个函数,仿佛是逐步构建操作链。
组合函数 c()
c()
是 R 中的组合函数,用于创建向量或将元素组合成一个向量。c
代表combine(组合),是R中最常用的函数之一。
用法:将多个数值、字符、布尔值或其他数据组合成一个向量。
示例:
1
2
3
4
5
6
7
8
9
10
11
12r复制代码# 数值向量
x <- c(1, 2, 3, 4, 5)
# 字符向量
y <- c("A", "B", "C")
# 混合向量
z <- c(1, "B", TRUE)
print(x) # 输出: 1 2 3 4 5
print(y) # 输出: "A" "B" "C"
print(z) # 输出: "1" "B" "TRUE" (都被转为字符)说明:
c()
会将输入的元素组合成一个向量,并且如果元素类型不同,会进行类型转换(通常转为字符类型)。
which()
函数
which()
是一个非常有用的函数,它用于返回满足条件的索引。常用于查找满足逻辑条件的元素在向量或数据框中的位置。
用法:传递一个逻辑向量,
which()
会返回为TRUE
的索引。示例:
1
2
3
4
5
6
7
8
9r复制代码x <- c(5, 10, 15, 20, 25)
# 查找大于10的元素索引
idx <- which(x > 10)
print(idx) # 输出: 3 4 5
# 查找等于20的元素索引
idx <- which(x == 20)
print(idx) # 输出: 4说明:
which()
返回满足条件的元素在向量中的位置,非常适合用于数据子集选择或条件过滤。
数据框(Data Frame)
R的独特之处:数据框是R中特别常用的数据结构,类似于SQL表格或Excel中的数据表。它是一个二维列表,列是不同类型的数据,行表示观测值。
示例:
1
2
3
4
5
6df <- data.frame(Name = c("Alice", "Bob"), Age = c(25, 30))
print(df)
# 输出:
# Name Age
# 1 Alice 25
# 2 Bob 30其他语言对比:Python中使用Pandas库的
DataFrame
类似。
统计分析
这是一些较常用的设计统计分析的函数,更多函数可以参考相关手册
示例数据
1 |
|
summary()
汇总统计信息
1 |
|
mean()
计算均值
1 |
|
median()
计算中位数
1 |
|
sd()
计算标准差
1 |
|
var()
计算方差
1 |
|
range()
计算数据的范围(最小值和最大值)
1 |
|
quantile()
计算分位数
1 |
|
cor()
计算相关系数
1 |
|
数据可视化
示例数据
1 |
|
plot()
绘制基础散点图、线图
1 |
|
hist()
绘制直方图
1 |
|
boxplot()
绘制箱线图
1 |
|
barplot()
绘制柱状图
pie()
绘制饼图
pairs()
绘制散点矩阵
1 |
|
lines()
绘制线图
1 |
|
heatmap()
热图
1 |
|
事实上,对于复杂的图,一般使用ggplot2包,而不适用R原生的绘图函数绘制。具体接口可查看相关文档。
数据挖掘
R语言提供了丰富的包和函数来实现各种机器学习算法。
K-Means 聚类
kmeans()
(K-Means 聚类算法)
1 |
|
kmeans()
函数用于执行 K-means 聚类,将数据分为预定数量的簇(centers=3
表示3个簇)。
回归分析(Regression)
lm()
(线性回归)
1 |
|
lm()
函数用于构建线性回归模型,mpg ~ wt + hp
表示预测变量mpg
是wt
和hp
的线性组合。
决策树(Decision Tree)
rpart()
(决策树算法)
1 |
|
rpart()
函数用于构建决策树模型,method="class"
表示分类任务。
随机森林(Random Forest)
randomForest()
(随机森林算法)
1 |
|
randomForest()
函数用于构建随机森林模型,该模型通过组合多棵决策树来提高预测精度。
朴素贝叶斯(Naive Bayes)
naiveBayes()
(朴素贝叶斯算法)
1 |
|
naiveBayes()
函数实现朴素贝叶斯分类器,通常用于文本分类或其他高维数据集的处理。
支持向量机(SVM)
svm()
(支持向量机算法)
1 |
|
svm()
函数用于构建支持向量机模型,适合于线性不可分的分类问题。