
按照我们学习其他语言的习惯,都是先学习一门语言的数据类型。
所以我们就先从R语言的数据类型开始启程,在本篇中,我们将一起学习到以下内容:
在R语言中,没有类似与C一样的显示定义数据类型,R语言通过分配R对象的方式给数据分配内存,其中R对象的数据类型为其中存储的变量的数据类型。
常见的基本R数据类型向量有以下六种:
同时,除了以上的六种数据类型,R还支持六种特殊的数据类型
接下来,我们通过栗子来学习相关的概念,毕竟如果单靠文字叙述还是显得比较单调空洞,来一些实例可能容易理解些。
注:
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语言中,实现了左分配和右分配两种赋值语法
1、左分配:
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