栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > R语言

R基础语法第 1 课---数据类型和赋值语法

R语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

R基础语法第 1 课---数据类型和赋值语法

按照我们学习其他语言的习惯,都是先学习一门语言的数据类型。

所以我们就先从R语言的数据类型开始启程,在本篇中,我们将一起学习到以下内容:

  1. R语言数据类型
  2. 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

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/855873.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号