(二)R语言数据结构——Vector, Matrix, List

注:本博客旨在分享个人学习心得,有不规范之处请多多包涵!

Vector 向量

简单来说,R语言中的vector是一个包含许多元素的一维数据结构,类似Python里的列表。下面的命令可以构造一个简单的R语言向量:

#c()函数意思为connect,它把括号里的内容整合成一个vector或list
myVec1 <- c(1, 2, 3, 4, 5)
myVec2 <- 1:5
myVec3 <- seq(1, 5, 1) #从1开始到5,每次增加量为1
#这里的myVec1、myVec2、myVec3是一样的

R语言允许在一个vector里存多种数据类型,但所有数据会被转化成一种类型,优先级为NULL < raw < logical < integer < double < complex < character < list < expression

R语言中vector的索引与计算如下例所示:

myVec1[1] #R语言的索引从1开始而并非0,所以这个的输出为1
myVec1[c(1,5)] #输出为myVec1的第一个和第五个元素,1 5
myVec[-2] #输出除第2个元素之外的所有元素,1 3 4 5
myVec1[3] <- 7 #myVec1的第三个元素值被改为7,myVec1变为1 2 7 4 5

如果要创建一个vector,用以下指令:

myVec4 <- numeric() #数值型的向量,默认所有值为0
myVec5 <- character() #字符型的向量,默认所有值为空

下例可结合上面所有的内容:

#该例可找到1到100000里所有能被7整除的数
test <- 1:100000 #我们要找的范围,它是一个vector
output <- numeric(length(test)) #创建一个数值型向量,长度为length(test),即test向量的长度
k <- 1 #初始化output向量的索引
for(i in test){
    
     #用i循环遍历所有test向量中的元素
    if(i %% 7 == 0){
    
     #如果这个元素能整除7
        output[k] <- i #把这个数字存在output向量的第k位
        k <- k + 1 #把索引增加1
    }
}

如果想要对结果进行进一步筛选,参考下例:

#在100到300范围内能被7整除的数
filtered <- output[output > 100 && output < 300]

R语言中vector是可以直接进行运算的。进行运算时,如果是vector和单一值的运算,vector内所有元素都会与这个值进行运算。如1:5+3,结果是每个元素都变大了3。如果是两个vector的运算,两个vector内对应位置的元素会进行运算。如1:5-1:5,结果是5个0。

Matrix 矩阵

简单来说,R语言中的matrix(矩阵)是一个二维的vector(向量)。
关于矩阵的创建和取索引请看下例:

test <- 1:12 #数据
dim(test) <- c(3, 4) #将test向量的维度变为3行4列
test[1, 2] #获取test第1行第2列第元素,输出为4
test[2, ] #获取test第2行所有元素,输出为2 5 8 11
test[, 4] #获取test第4列所有元素,输出为10 11 12
test[10] #获取test中从[1, 1]开始按列读第10个元素,10
test[2, c(3, 4)] #获取test第2行第3和4列元素,输出为8 11

点开Environment里的test矩阵,窗口左上会出现test具体内容:
列表
有另一种创建矩阵的方式:

#data是填入的数据,nrow是行数,ncol是列数,byrow是填写数据是否按行,默认是FALSE(按列填)
newMatrix <- matrix(data = 1:30, nrow = 5, ncol = 6, byrow = TRUE)

R语言中矩阵的运算与向量类似。要注意的是数学中的矩阵乘法要用%*%这个符号,而不是单纯的*

List 列表

R语言的列表和向量在某些方面比较类似。它也是一个一维的数据结构,但不同的数据是不同类型且有自定义的名称。
关于列表的创建和索引访问请见下例:

myList <- list(char = c("a", "b", "c"), num = 1:7, func = sum, logic = TRUE, list = list(one = 1, two = 2, three = 3)) #可以在括号里加任何数据类型,甚至另一个列表
names(myList) #返回myList里所有元素的名称,输出为"char" "num" "func" "logic" "list"
length(myLIst) #返回myList的长度(有几个元素),输出为5

myList[1] #myList的第1个元素内容及其名称,输出为c("a", "b", "c")与char
myList[[2]] #myList的第2个元素内容,输出为1:7
myList[[2]][4] #myList的第2个元素内容的第4位,输出为4
myList$logic #myList中名字为logic的元素的内容,输出为TRUE
myList["logic"] #myList中名字为logic的元素内容及其名称,输出为TRUE与logic

myList在Console中的显示如下图:
myList

结束语

Vector, Matrix, List是三种比较常用的数据类型。data.frame类型将在下次着重介绍。有任何问题或想法欢迎评论和私信!

猜你喜欢

转载自blog.csdn.net/EricFrenzy/article/details/119174237