为了账号安全,请及时绑定邮箱和手机立即绑定

R语言学习:变量,向量和因子

标签:
SQL Server

R是矢量化的语言,这意味着操作自动地应用于向量的每一个元素,不需要显式编写遍历每个分量的代码。向量没有维数,这意味着没有列向量或行向量之分。

R是一种区分大小写的解释性语言,R语句的分隔符是分号“;”,或换行符,当语句结束时,可以不使用分号“;”,R语言会自动识别语句结束的位置。R语言只支持单行注释,注释由符号#开头,当前行出现在#之后的任何文本都会被R解释器忽略。

一,变量是什么样子?

首先,我们学习变量的用法,变量用于临时存储数据,以便重用。在R语言中,变量不需要声明,直接赋值,变量名是大小写敏感的,为变量赋值的操作符是:<- 或 =,建议使用<- 作为变量的赋值符号,以下代码为变量v赋值,并输出变量的值:

> v<-3> v[1] 3

注意,输出结果[1],表明从变量的第一个原始开始显示,这意味着,变量实际上是一个向量,R语言中不存在标量类型,最小的数据类型是向量,而向量是一系列有序的值。R按照序列的顺序,逐个打印向量的各个元素。

函数print用于输出变量的值,在控制台中,可以直接输入变量名,控制台自动调用print函数打印变量的值。

如果想把赋值和打印处于写在同一行中,可以把赋值语句写在()中,这样,就能在同一行中完成变量的赋值和打印:

>(v<-3)[1] 3

1,变量的类型

R语言中不存在标量类型,所有的变量都属于特定的类(class),类用于表示变量属于的类型(type),可以认为类(class)和类型(type)相同,用户可以通过class(variable)函数查看变量的类型:

> v=1:3> v[1] 1 2 3> class(v)[1] "integer"

变量可以存储任何数据类型,也可以存储任何数据对象,例如,函数,分析的结果以及一个图形,单个变量在某时刻取值为一个数字,而后可以被赋值为字符,还可以取值为其他数据类型。

2,变量的类型检查和类型转换

通过is.* 函数检查变量的类型,通过as.*函数转换变量的类型

复制代码

> vc=c('1','2','3')> is.character(vc)[1] TRUE> vi=as.integer(vc)> is.integer(vi)[1] TRUE

复制代码

3,变量的删除

在R中,创建变量会占用系统的存储空间,而删除变量会释放存储空间;为了确保存储空间的及时释放,可以使用gc函数,强制系统回收垃圾,释放操作系统中不再使用的存储空间,R也会自动周期性地执行垃圾回收。使用rm函数把变量从当前的作用域中删除:

> rm(variable)
> gc()

4,NULL值和NA值

NULL是个特殊值,表示未知值,NA表示缺失值,NULL和NA之间最大的区别是:NA是一个标量值,长度为1,而NULL不会占用任何空间,长度为零:

> length(NA)[1] 1> length(NULL)[1] 0

使用is.null函数验证NULL值,使用is.na函数验证NA值:

> is.null(NULL)[1] TRUE> is.na(NA)[1] TRUE

二,序列和向量

向量是R语言中最基本的数据类型,向量是有序的数据序列,序列中的每一个数据项叫做向量的一个元素,同一个向量的元素的数据类型必须是相同的,同一个向量中无法混杂多种不同类型的元素,向量元素可以是数值,字符,逻辑值等,特别地,对于正整数序列,可以使用冒号 : 操作符,该操作符能够产生一个序列,例如 n:m,用于创建从数值n开始,步长为1,依次递增,到数值m结束的有序的数值序列:

> 1:3[1] 1 2 3

1,seq函数家族

seq函数用于创建序列,参数分别是开始值(from),结束值(to),步长(by),例如:

seq(from = 1, to = 1, by=step)

seq.int是seq函数的包装,步长不为1的数值序列,可以通过seq.int函数来实现,该函数有三个参数,第一个参数是序列的开始值,第二个参数是序列的结束值,第三个参数默认值是1,用于指定步长。

> seq.int(1,5,2)[1] 1 3 5

函数seq_len(n) 用于创建长度为n的序列,相当于设置seq.int函数的:开始(from)为1,步长(by)为1,终止值(to)为n:

seq_len(2)[1] 1 2

函数seq_along(arg)有一个输入参数,该函数根据参数变量的长度(length)创建相同长度的序列:

> seq_along(c(1,3,5))[1] 1 2 3

2,向量的创建

向量(Vector,也叫矢量)是数据的有序序列。函数c把一系列的数据拼接起来,创建一个向量;也可以通过c函数和冒号操作符,创建向量,例如:

> c(1,2,3,4)[1] 1 2 3 4> c(1:4)[1] 1 2 3 4

也可以通过vector(class,length)函数,创建指定类型和长度的向量,向量的每个元素的值是指定类型的默认值,可以是0,FALSE,空字符串,或NULL。

> vector('integer',3)[1] 0 0 0

R为每个类型都包装了一个创建向量的函数,格式是class_name(length),例如:

> numeric(3)[1] 0 0 0

3,向量的长度

向量的长度,就是序列的元素个数,通过length函数获取向量的长度

> length(c(1:3))[1] 3

4,为向量的各个元素命名

R能够为向量的各个元素命名,元素的命名有两种模式:在创建向量时为元素命名,通过names函数为元素命名:

复制代码

> (v=c(a=1,b=2,c=3))a b c 1 2 3 > names(v)=c('va','vb','vc')va vb vc 1 2 3

复制代码

输出的结果中,并没有[1],这说明,无名的向量是按照序列的顺序输出的。

三,索引向量

R通过下表来访问向量中特定位置的元素,第一个位置是1。向量的索引格式是v[n],n叫做向量的下标,共有三种索引向量的方法。超出范围的下标值,不会导致错误,向量会返回缺失值(NA),不返回任何下标,将返回整个向量的值。

1,下标为整数或整数向量

当n值为正整数时,返回特定位置的元素的值;当n值为负整数时,不返回特定位置的元素的值;当n值为整数向量时,返回特定位置的元素。

> v=1:3> v[1][1] 1> v[-1][1] 2 3

v[-1]和 v[c(2:3)]返回的元素相同。

2,下标为逻辑向量

当n值为逻辑向量时,返回位置为true的元素的值;

> v[v<=2][1] 1 2

v[v<=2]和v[c(TRUE,TRUE,FALSE)]返回的元素相同。

3,下标为字符或字符向量

对于命名向量,给向量传入字符向量,命名向量返回包含名字的元素的值;

> v=(a=1,b=2,c=3)> v[c('a','b')]a b 1 2

4,向量元素的位置

which函数,返回逻辑向量中为TRUE的位置。

> which(c(1:3)>1)[1] 2 3

which.min(v) 函数是表达式 which(min(v))的简写,表示向量的最小值元素的位置,which.max(v) 函数是表达式 which(max(v))的简写,表示向量的最大值元素的位置

> which.min(c(1:3))[1] 1

四,向量元素的追加,删除和更新

可以向矢量中追加元素,例如,向矢量的末尾追加一个元素:

> r=c(1,3,4)> r[4]=5> r[1] 1 3 4 5

向量不能直接删除特定位置的元素,但是,我们可以通过为向量重新赋值来实现:

> r=r[r!=4]> r[1] 1 3 5

更新向量特定位置的元素值,只需要为向量的指定元素赋予新值:

> r[3]=4> r[1] 1 3 4

五,向量的循环

引入向量的目的,运算符或函数,能够作用于向量中的每个元素,而无需显式地编写循环语句,向量内置隐式循环,用于循环向量的各个元素执行计算。

1,向量和单个数值相加

向量和单个数值n相加,是把向量的每个元素都和单个数值n相加,返回的结果是向量:

> x<-c(1:3)> x+1 [1]  2  3  4

2,向量和向量相加

向量和向量相加,在相同的序列位置上,对两个向量的元素相加,返回的结果是向量,向量和向量做运算,推荐两个向量具有相同的长度(length):

> a=1:3> b=4:6> a+b[1] 5 7 9

六,向量的排序和排名

排序:使用sort函数对向量进行排序,order函数返回元素在排序之后的位置,v[order(v)]返回和sort(v)相同的结果:

复制代码

> v=c(1,3,5,2,4)> sort(v)[1] 1 2 3 4 5> order(v)[1] 1 4 2 5 3> v[order(v)][1] 1 2 3 4 5

复制代码

排名:rank函数为数据框中的每个元素进行排名,不过rank函数只能作用于向量,只能返回向量元素的排名:

rank(x, na.last = TRUE,     ties.method = c("average", "first", "last", "random", "max", "min"))

七,因子(factor)

因子(factor)是一个用于存储类别变量的类型,因子的每个item都是字符类型。因子具有因子水平(levels)向量,用于限制因子的item的取值范围,因子的item只能从因子水平中取值,这意味着,因子的每个item要么是因子水平中的字符,也么是缺失值。

通过factor函数创建因子,factor函数的第一个参数必须是字符向量,通过levels参数设置因子水平,例如,因子sex的值是向量c('f','m','f','f','m'),因子水平是c('f','m'):

> sex=factor(c('f','m','f','f','m'),levels=c('f','m'))> sex[1] f m f f mLevels: f m

1,因子水平

因子水平,可以通过函数levels(factor)来查看:

> levels(sex)[1] "f" "m"

2,因子水平的命名

使用factor函数创建因子,可以使用labels参数为每个因子水平添加label,注意,labels参数的字符顺序,要和levels参数的字符顺序保持一致。

> sex=factor(c('f','m','f','f','m'),levels=c('f','m'),labels=c('female','male'),ordered=TRUE)> sex[1] female male   female female male  Levels: female < male

3,有序因子

因子一般是无序的,这可以通过is.ordered函数来验证:

> is.ordered(sex)[1] FALSE

有些因子的水平在语义上大于或小于其他水平,R支持按顺序排列的因子,使用ordered函数,或通过给factor函数传入order=TRUE参数,把因子转换为有序的因子。

例如,通过ordered函数把sex因子转换为有序的因子:

> ordered(sex)[1] f m f f mLevels: f < m

或者,通过factor函数创建有序因子:

> sex=factor(c('f','m','f','f','m'),levels=c('f','m'),ordered=TRUE)> sex[1] f m f f mLevels: f < m

 

附,特殊的操作符

整除操作符%/%,该操作符的两侧是整数,返回的结果是整数,不足1的小数取整为0:

> 1%/%3[1] 0> 5%/%3[1] 1

取模操作符 %%,该操作符的两次是整数,返回的结果是整数,求整除的余数:

> 5%%3[1] 2


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消