按照我们学习其他语言的习惯,都是先学习一门语言的数据类型。
所以我们就先从R语言的数据类型开始启程,在本篇中,我们将一起学习到以下内容:
- R语言数据类型
- R语言的三种赋值方法
一、R语言数据类型
在R语言中,没有类似与C一样的显示定义数据类型,R语言通过分配R对象的方式给数据分配内存,其中R对象的数据类型为其中存储的变量的数据类型。
常见的基本R数据类型向量有以下六种:
- Logical(逻辑型)
- Numeric(数字)
- Integer(整型)
- Complex(复合型)
- Character(字符)
- Raw(原始型)
同时,除了以上的六种数据类型,R还支持六种特殊的数据类型
- Vectors 向量
- Lists 列表
- Matrices 矩阵
- Arrays 数组
- Factors 因子
- Data Frames 数据帧
接下来,我们通过栗子来学习相关的概念,毕竟如果单靠文字叙述还是显得比较单调空洞,来一些实例可能容易理解些。
注:
one、所有例子皆在RStudio中运行截图
two、R语言中的class函数会返回数据类型,以下例子会用到这个函数
1、六种基本类型向量
1.1、Logical(逻辑型)
逻辑型只有两种取值,True 和False(类似于C++的bool)
1.2、Numeric(数字)
用于存储数字变量
1.3、Integer(整型)
用于存储整型变量
1.4、 Complex(复合型)
就是数学中的复数
1.5、Character(字符)
字符变量,声明时用单引,或者双引号括出
1.6、Raw(原始型)
2、六种数据类型
重温一遍,这六种数据类型分别是:向量(Vectors),列表(list),矩阵(matrices),数组(array),因子(factor),数据帧(data frames)
2.1、 向量
在R语言中,向量类型可以由c()函数进行声明,同时向量数据可以进行加减乘除,逻辑运算,排序等向量运算
同样,来一个栗子学习
v1 <- 1:10 #创建一个多元素向量 cat(v1,'类型是:',class(v1),'n') #1 2 3 4 5 6 7 8 9 10 类型是: integer v2 <- c('you','me','love',5,TRUE) #通过c()函数创建向量 cat(v2,'类型是:',class(v2),'n') #you me love 5 TRUE 类型是: character v3 <- seq(5, 9, by = 0.4) #通过seq()函数创建向量 cat(v3,'类型是:',class(v3),'n') #5 5.4 5.8 6.2 6.6 7 7.4 7.8 8.2 8.6 9 类型是: numeric #以下方式访问向量 print(v2[0]) #注意看v2[0]中存储的数据 #character(0) cat(v2[1],'n') # you cat(v3[c(1,3,4)],'n') #5 5.8 6.2 cat(v2[c(-1,-3)],'n') #me 5 TRUE
以上代码中的print,cat都是输出函数,#是R语言的注释,R语言中不支持多行注释。每条输出函数下的注释,都是他们对应的输出。
再来个栗子了解下向量的运算吧:
v1 <- 1:10 v2 <- 11:20 print(v1+v2) #加 print(v1-v2) #减 print(v1*v2) #乘 print(v2/v1) #除 print(v2 %/% v1) #整除 print(v2 %% v1) #求余 print(v2^v1) #指数运算
2.2、列表
向量的列表是个神奇的数据类型,一个列表可以包含不同类型的向量,你可以往里面插入向量,矩阵,函数,甚至是另一个列表。。。
他通过list()函数来声明。
栗子
list1 <- list(c(1,2,3),'哈哈',9,matrix(1:10,nrow = 2,ncol = 5,byrow = TRUE),list(c('a','b','c'))) print(list1)
那如何访问矩阵的元素呢?有两个方法进行访问:
方法一:直接用列表名加索引,例 list1[1]
方法二:先给列表元素命名,再利用$符号访问列表内容,例 list1$2
栗子
list1 <- list(c(1,2,3),'哈哈',9,matrix(1:10,nrow = 2,ncol = 5,byrow = TRUE),list(c('a','b','c'))) names(list1) <- c('c','str','num','matrix','list') #给列表元素进行命名 print(list1) #访问列表元素 print(list1[1]) print(list1$str)
同样,我们可以利用 list1[1] <- c(‘1’)的方式进行对列表的更新
利用 list3 <- c(list1,list2)来进行列表的合并
一样,列表可以转换为向量,利用unlist()函数即可,以上面例子为例:
2.3、矩阵
矩阵通过函数matrix()进行创建,上面列表的例子我们也可以看到创建了个矩阵(不超纲,不超纲),现在就具体讲下矩阵的声明方式。
语法为:matrix(data, nrow, ncol, byrow, dimnames)
其中data是输入向量
nrow是创建的行数
ncol是创建的列数
byrow如果为TRUE,则矩阵按行排列
dimnames是行列名称
栗子:
m1 <- matrix(1:10,nrow = 2,ncol = 5,byrow = TRUE) m2 <- matrix(11:20,nrow = 2,ncol = 5,byrow = FALSE) rownames = c("row1", "row2") colnames = c("col1", "col2", "col3", "col4", "col5") m3 <- matrix(11:20,nrow = 2,ncol = 5,byrow = TRUE,dimnames = list(rownames,colnames)) print(m1) print(m2) print(m3)
矩阵的访问就类似于C语言的二维数组的访问,我们可以通过m1[1,1] 获取元素,取某行可以用m1[1,],取某列可以用m1[,1]。
运算:
矩阵的运算中加减乘除,就是对应元素进行运算。
如果需要计算矩阵乘法,就需要用%*%运算符
转置:
利用函数 t() 进行转置
2.4、数组
数组通过array来创建
array( data, dim, dimnames )
其中,data为输入向量,
dim为维度,如(2,3,2)即代表2行,3列,2个矩阵
dimnames为行列名
栗子:
v1 <- 1:5 v2 <- 10:20 row.names <- c('row1','row2','row3') colnames <- c('col1','col2','col3','col4','col5') a1 <- array(c(v1,v2),dim = c(3,5,2),dimnames = list(row.names,colnames)) print(a1) #访问数组内容 print(a1[1,,1]) print(a1[1,3,1]) print(a1[1,3,2]) print(a1[,1,1]) print(a1[,,1])
2.5、因子
R语言中的,factor()可以统计数据的分类,找出输入向量的所有元素(其实相当于一个集合)
以上面的矩阵为例:
2.6、数据帧
数据帧是表或者二维阵列结构,其中每一列包含一个变量的值,并且每一行包含来自每一列的一组值。
数据帧的特性:
- 列名称应为非空。
- 行名称应该是唯一的。
- 存储在数据帧中的数据可以是数字,因子或字符类型。
- 每个列应包含相同数量的数据项。
栗子(输出太长啦,就不截图了,自己回家试试):
#创建 daframe <- data.frame( da_id = c(1:5), da_name = c('新','期','田','贞','好'), da_yanzhi = c(10,9,8,9,4) ) print(daframe) #得到数据帧的结构 str(daframe) #获得数据帧摘要 print(summary(daframe)) #提取数据 r1 <- data.frame(daframe$da_id,daframe$da_yanzhi) #方法一 print(r1) r2 <- daframe[1:2,] #方法二,获取前两行 print(r2) r3 <- daframe[1:2,1:2] #同理,可以获得前两行两列 print(r3) #给数据帧添加数据 #1、添加行 daframe1 <- data.frame( da_id = 6, da_name = '吾', da_yanzhi = 10, stringsAsFactors = FALSE ) finalframe <- rbind(daframe,daframe1) print(finalframe) #2、添加列 finalframe$height <- c(160,170,180,190,175,178) print(finalframe)
二、常见的赋值语法 终于将数据类型学完了,接下来就来学习下在R语言中的三种赋值语法
在R语言中,实现了左分配和右分配两种赋值语法
1、左分配:
- <- 这个符号,我们上面都是用的这个运算符来进行赋值
- = 这个符号,很常见,和C,C++等是一样的
- <<- 这个符号,有点像左移运算符,但是。。并不是哦
2、右分配:
- -> 这个符号,与左分配<-相反的方向,很简单明了
- ->> 这个符号,同上
老规矩,来个栗子:
str1 = '两姓联姻' str2 <- '一堂缔约' str3 <<- '良缘永结' '匹配同称' -> str4 '永载鸳谱' ->> str5 cat(str1,str2,str3,str4,str5)
OK咯,第一课到此结束,下次继续~
下一学:R基础语法第2课—变量与运算符
原文链接:https://blog.csdn.net/the_sangzi_home/article/details/105461263