R语言是一种区分大小写的解释型语言,R 语言中有多种数据类型, 包括向量、矩阵,数据框以及列表等。 R语言中的多数功能是由程序内置函数和用户自编函数提供的, 每一次交互会话的对象都被保存在内存中。一些基本函数默认可直接使用, 而其他函数则需要载入程序包方可使用。
R语言是一种交互式编程工具, 可以在命令提示符 $(>)$ 后输人命令或者一次性执行后缀为. R的脚本文件中的一组命令。
工作空间 (workspace) 就是 R语言当前的工作环境,储存着用户定义的所有对象,当一个R会话结束后, 可将当前工作空间保存到一个镜像中, 并在下次启动R语言时自动载入。当前工作目录(working directory) 是R语言用来读取文件和保存结果文件的默认目录。可以使用函数 getwd()
来查看当前的工作目录, 使用函数setwd()
设定当前工作目录。
R语言中有效的变量名称是由字母、数字以及点号 (.) 或下划线_
组成。在最新版本的R语言中, 赋值可以使用左箭头 $(<-)$ 、等号 $(=)$ 、右箭头 $(->)$ 来实现, 但是使用等号=
赋值不是标准语法, 某些情况下使用等号赋值会出现问题, 所以不推荐使用。可以使用函数 ls
查看已经定义的变量,使用函数rm()
删除定义的变量。
启动R语言后默认开始一个交互式会话, 从键盘接收输人并从屏幕输出结果, 也可在会话中执行脚本文件中的命令集并直接将结果输出到多类目标中。R语言输出到文件的方法很多, 函数 sink("filename")
将输出重定向到文件filename
中, 默认情况下输出会覆盖同名文件已有内容, 使用参数append=TRUE
将文本追加到文件中, split=TRUE
可将输出同时发送到屏幕和输出文件中。此外,重定向图形输出, 可先使用函数 pdf("filename, pdf")
、png("filename,png")
等创建文件, 然后进行图形绘制, 最后使用函数 dev.off()
将图形输出到文件, 并返回到终端。
注释一般用于代码的说明, 使阅读者更易理解, 不影响代码执行。R一般只支持单行注释,注释符号为#
。若使用多行注释,也可使用 if
语句: if(FALSE){注释内容}
。
数据类型用于声明不同类型的变量和函数返回值,R语言拥有多种用于存储数据的对象类型,包括向量、矩阵、数组、数据框、因子和列表等,它们在存储数据的模式、占用空间、 创建方式和结构复杂度上有所不同。
向量 (vector) 是用于存储数值型、字符型或逻辑型数据的一维数组, 可使用函数 c()
创 建向量。向量可包括数值型向量、字符型向量和逻辑型向量,单个向量中的数据必须是相同类型,不能混杂多种模式的数据。
数值型向量可使用统计函数 sum(),mean(),var(),sd(),max()
等获取该向量元素的和、平均值、方差、标准差、最小值和最大值等。
字符型向量有对应的操作函数, 例如 toupper()
函数和tolower()
函数可将字符串中 母进行大小写转換; nchar()
函数可统计字符串长度; strsplit()
函数可利用分隔符拆分字符 串; gsub()
函数可替换字符串中的特定字符。
逻辑型向量最常使用的处理函数是which()
函数, 可用于筛选数据下标, 类似函数还有 all()
和 any
函数, all()
用于检查逻辑向量是否全部为TRUE, any()
用于检查逻辑向量是否含有TRUE.
矩阵 (matrix) 类似于其他语言中的二维数组, 每个元素都具有相同的数据类型 (数值型、字符型或逻辑型), 可使用 matrix()函数创建矩阵,语法格式如下:
matrix (data =NA, nrow =1, ncol =1, byrow = FALSE, dimnames = NULL)
其中, data
为向量,包含了矩阵的数据; nrow
和 ncol
用来指定行和列的维数; byrow
表明矩阵是按行填充或是按列填充, 默认值为 FALSE
, 表示按列填充; dimnames
用于设置行和列的名称。
可以使用下标和方括号选择矩阵中的行、列或元素。 X[i,]
取矩阵 $\mathrm{X}$ 中的第 i
行数据, X[, j]
指第j
列, X[i, j]
指第 i
行第j
列的元素值, 其中 i, j
既可以是数值, 也可以是数值型向量。使用函数t()
可实现矩阵转置。
行、列数都相同的矩阵之间可以进行加减乘除运算,运算规则是行、列对应位置的每个元素分别做加减乘除运算。当第一个矩阵的列数等于第二个矩阵的行数时, 可用 % * %
运算符令两个矩阵相乘。
数组 (array) 和矩阵类似, 也是同一类型数据的集合, 但是维度可以大于 2 , 可使用函数 array()
创建数组, 语法格式如下:
array(data=NA, dim=length(data),dimnames=NULL)
其中, data
是包含数组数据的向量; dim
设置数组的维度, 默认为一维数组; dimnames
为各个维度的名称标签的列表。
从数组中选取元素的方式和矩阵相同, 也是通过使用元素的行索引和列索引,类似坐标形式。常使用 apply()
函数对数组或矩阵中的元素进行跨维度计算, 语法格式如下: apply (X, MARGIN, FUN)
其中, X
表示数组; MARGIN
指定按行计算还是按列计算, 1
表示按行计算, 2
表示按列计算, 3
及以上表示按更高维度计算; FUN
表示具体的运算函数名。
数据框(Data Frame) 是一种特殊的二维列表, 可理解为 “表格”, 每列都有唯一列名且长度相等, 同一列的数据类型要求一致, 不同的列可以包含不同类型的数据, 数据框使用 data.frame()
函数进行创建, 语法格式如下:
data. frame(..., row. names = NULL, check. rows = FALSE,check. names = TRUE, fix. empty. names = TRUE,
stringsAsFactors = default.stringsAsFactors()
其中, row. names
为行名, 默认为 NULL
, 可以设置为单个数字、字符串或字符串和数字的 向量; check. rows
可检测行的名称和长度是否一致; check. names
检测数据框的变量名是否合法; fix, empty, names
可设置未命名的参数是否自动设置名字; stringsAsFactors
的值为布尔值, 检测字符是否转换为因子, 默认值是 TRUE
。
使用函数 summary()
可以显示数据框的概要信息。我们可以通过类似坐标的形式选取数据框中指定行的指定列元素, 也可以使用$提取指定列。
可以对已有数据框进行扩展。可以直接将数据貳值给该数据框添加的列名, 也可以使用函数 cbind()
将多个向量横向合成一个数据框, 或使用 rbind()
将两个数据框进行纵向合并。
因子 (factor) 可用于存储不同类别的变量, 包括名义型变量和有序型变量。名义型变量是没有顺序之分的类别变量,有序型变量表示一种顺序关系, 而非数量关系。因子在R语言中十分重要, 它决定了数据的分析方式以及如何进行视觉呈现。使用函数 factor()
创建因子, 将类别向量作为输人参数, 语法格式如下:
factor ( X=character(), levels, labels = levels,exclude =NA, ordered =is. ordered(x), nmax=NA)
其中, x
表示输人的数据向量; levels
用于指定各 level
值, 默认按字母顺序创建; labels
表示 各个 level
的标签; exclude
表示从 x
中剔除的水平值, 默认为 NA
值,使用该参数时要注意 对应调整 labels
的长度; ordered
值为布尔值, 确定因子水平是否有顺序, 若有取TRUE
, 默认取 FALSE
; nmax
表示水平个数的限制。
函数 gl()
可以用来生成因子水平, 语法格式如下:
gl(n,k,length=n*k,labels=seq_len(n),ordered=FALSE)
其中, n
表示设置的 level
的个数; k
表示设置每个 level
重复的次数; length
表示设置的长度; labels
表示各个 level
的值; ordered
表示确定 level
是否有顺序。
列表(list) 是 R语言的对象有序集合, 是 R语言的数据类型中最复杂的一种,可以用来保存多种不同类型的数据,可包括向量、矩阵、数据框,甚至另一个列表。使用 list()
函数创 建列表,可以使用 names()
函数给列表中元素命名。
列表中元素可以通过索引进行访问,也可使用 names()
命名的名字进行访问。当对列表进行添加、删除、更新等操作时, 直接通过索引对该元素进行操作。使用 unlist()
函数可将列表转换成向量, 方便我们进行算术运算。
摘自:
基本操作
getwd()
# setwd()
a <- 20
ls()
if(FALSE){
'HELLO WORLD'
}
数据类型
str_vec <- c('a','b','c','d')
str_vec
num_vec <- c(1,2,3,4,5)
num_vec
which(num_vec>1)
which(str_vec=='a')
1:10
A <- matrix(1:10,nrow = 2,ncol = 5,byrow = TRUE)
B <- matrix(1:5,nrow = 5)
B
1 |
2 |
3 |
4 |
5 |
A%*%B
55 |
130 |
cat('相乘结果',A%*%B)
相乘结果 55 130
vector1 <- c(5,9,3)
vector2 <- c(10,11,12,13,14,15)
c(vector1,vector2)
new.array <- array(c(vector1,vector2),dim=c(3,3,2))
print(new.array)
, , 1 [,1] [,2] [,3] [1,] 5 10 13 [2,] 9 11 14 [3,] 3 12 15 , , 2 [,1] [,2] [,3] [1,] 5 10 13 [2,] 9 11 14 [3,] 3 12 15
apply(new.array,1,sum)
apply(new.array,2,sum)
apply(new.array,3,sum)
table <- data.frame(姓名=c('a','b'),工号=c('001','002'),月薪=c(1000,2000))
table
姓名 | 工号 | 月薪 |
---|---|---|
a | 001 | 1000 |
b | 002 | 2000 |
summary(table)
姓名 工号 月薪 a:1 001:1 Min. :1000 b:1 002:1 1st Qu.:1250 Median :1500 Mean :1500 3rd Qu.:1750 Max. :2000
table$月薪
table$部门 <- c('运营','技术')
table
姓名 | 工号 | 月薪 | 部门 |
---|---|---|---|
a | 001 | 1000 | 运营 |
b | 002 | 2000 | 技术 |
sex <- factor(c('f','m','f','f','m'),levels = c('f','m'),labels = c('female','male'),ordered = TRUE)
sex
v <- gl(3,4,labels = c('G','R','T'))
v
list_data <- list(c('a','b','c'),matrix(1:6,nrow = 2),list('1,2','3'))
list_data
1 | 3 | 5 |
2 | 4 | 6 |
names(list_data)= c('string','numbers','list')
list_data
1 | 3 | 5 |
2 | 4 | 6 |
list_data$string