R是向量化的语言,最突出的特点是对向量的运算不需要显式编写循环语句,它会自动地应用于向量的每一个元素。对象是R中存储数据的数据结构,存储在内存中,通过名称或符号访问。对象的名称由大小写字母、数字0-9、点号和下划线组成,名称是区分大小写的,并且不能以数字开头,特殊的对象名称可以通过界定符 `` 来转为合法的对象名称,注意,点号( . ) 被视为没有特殊含义的单字符。

R语言非常灵活,例如:

  • R语言区分大小写,不管是变量名和函数名,都是大小写敏感的。
  • 直接给变量赋值,R中不能显式声明变量和类型;
  • 变量的类是可变的,就是说,同一个变量可以存储字符,也可以存储日期和时间,也可以存储数值。
  • R语句的分隔符是分号“;”,或换行符,当语句结束时,可以不使用分号“;”,R语言会自动识别语句结束的位置。
  • R语言只支持单行注释,注释由符号#开头,当前行出现在#之后的任何文本都会被R解释器忽略。
  • R支持向量化运算

R语言拥有强大的数据处理和绘图功能,还是免费的,是数据分析人员必学必会的一门语言。

一,变量是什么样子?

首先,我们学习变量的用法,变量用于临时存储数据,以便重用。在R语言中,变量可以直接赋值,跟C、Java等语言不同,R的变量不能声明,因为R没有这个概念。变量名是大小写敏感的,变量名可以包含字符、数字、和下划线,对于包含特殊字符的变量名,需要使用 `` 把名称转换位有效的变量名,例如:

dataset$`#Visitors (T3M)`

用户可以使用make.names() 获得一个有效的变量名。为变量赋值的操作符是:<- 或 =,建议使用<- 作为变量的赋值符号,以下代码为变量v赋值,并输出变量的值:

> v<-
> v
[]

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

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

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

>(v<-)
[]

1,变量的常用通用类

R中所有的变量都属于特定的类(class),类用于表示变量属于的类型(type),可以认为类(class)和类型(type)相同,常用的通用类是:

  • 数值integernumeric
  • 字符character,使用单引号或双引号
  • 日期和时间:日期的类型是Date,时间是POSIXctPOSIXt
  • 逻辑logical,有效值是:TRUEFALSE

用户可以通过class(variable)函数查看变量的类型:

> v <- :
> v
[]
> class(v)
[] "integer"

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

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

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

> vc <- c('','','')
> is.character(vc)
[] TRUE
> vi <- as.integer(vc)
> is.integer(vi)
[] 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语言中最基本的数据结构,向量是有序的数据序列,序列中的每一个数据项叫做向量的一个元素,同一个向量的元素的数据类型必须是相同的,同一个向量中无法混杂多种不同类型的元素,向量元素可以是数值,字符,逻辑值等。

1,向量的创建

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

> c(,,,)
[]
> c(:)
[]

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

> vector('integer',)
[]

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

> numeric()
[]

2,向量的长度

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

> length(c(:))
[]

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

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

> (v <- c(a=,b=,c=))
a b c > names(v)<- c('va','vb','vc')
va vb vc

输出的结果中,并没有[1],这说明,无名的向量是按照序列的顺序输出的。names()函数也能获得向量元素的名称,如果向量中没有一个元素有名字,那么names()函数返回NULL。

三,序列

特别地,对于正整数序列,可以使用冒号 : 操作符,该操作符能够产生一个序列,例如 n:m,用于创建从数值n开始,步长为1,依次递增,到数值m结束的有序的数值序列:

> :
[]

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

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

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

> seq.int(,,)
[]

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

seq_len()
[]

四,索引向量

向量没有维数,这意味着没有列向量或行向量之分。通常情况下,通过下标和[]的组合来访问向量中特定位置的元素,索引向量的格式是v[n],n 叫做向量的下标,下标是向量元素的位置,第一个元素的位置是1,依次加1。如果下表超出向量的长度范围,不会导致错误,但是向量会返回缺失值(NA);如果不设置任何下标,那么将返回整个向量的值,R会按照元素在向量中的位置,顺序打印出向量的元素值。除了下标和[] 之外,R还提供其他方式来访问向量的元素:元素名称、逻辑向量。

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

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

> v <- :
> v[]
[]
> v[-]
[]

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

2,下标为逻辑向量

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

> v[v<=]
[]

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

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

对于元素被命名的命名向量,给向量传入字符向量,命名向量返回指定名字的元素值;

> v <-(a=,b=,c=)
> v[c('a','b')]
a b

五,向量元素的位置

向量中包含一系列的数据,如何选择向量中符合条件的元素呢?在上节中,可以通过多种方式来索引向量的元素,如果知道符合条件的元素的位置,那么R就可以使用位置来索引向量的元素值。

1,which函数

which函数用于返回逻辑向量中元素值为TRUE的位置,

> v <- c(,,,)
> v>
[] FALSE TRUE TRUE FALSE
> which(v>)
[]
> v[which(v>)]
[]

2,逻辑向量

最简单的方式是使用逻辑向量来索引向量的元素

> v[v>]
[]

六,向量的循环

R支持向量化运算,这意味着,运算符或函数能够作用于向量中的每个元素,而无需显式地编写循环语句,这种内置的循环,用于对向量的各个元素执行计算,性能是非常高的。

1,向量和单个数值相加

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

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

2,向量和向量相加

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

> a=:
> b=:
> a+b
[]

当两个向量的长度不同时,R会循环短的向量,以配合较长的向量。如果长向量不是短向量的整数倍,R将抛出警告消息。推荐的做法是:对长度相同的两个向量做运算。

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

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

> 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

八,向量的排序和排名

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

> v <- c(,,,,)
> sort(v)
[]
> order(v)
[]
> v[order(v)]
[]

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

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

参考文档:

Quick-R

R语言学习 第一篇:变量和向量的更多相关文章

  1. R语言学习 第九篇:plyr包

    在数据分析中,整理数据的本质可以归纳为:对数据进行分割(Split),然后应用(Apply)某些处理函数,最后将结果重新组合(Combine)成所需的格式返回,简单描述为:Split - Apply ...

  2. R语言学习-基础篇1

    ###第一周:R基础 rm(list = ls())  #ctr+L###矩阵相乘,函数diag()a=matrix(1:12,nrow=3,ncol=4)b=matrix(1:12,nrow=4,n ...

  3. R语言学习 第二篇:矩阵和数组

    向量是一维的,只有行这一个维度,没有其他维度.R可以创建更高维度的数据对象,例如,矩阵.数据框.数组,索引高维度的对象时,需要使用元素的下标.这些对象的下标都使用中括号[]和索引,第一个维度是row, ...

  4. R语言学习-基础篇

    从五月10日开始自学R in action,将我的学习所得逐渐发布在博客上. chapter1.新手上路 工作空间:存储着所有用户定义的对象(向量,矩阵,函数,数据框,列表): 当前的工目录保存是R用 ...

  5. Java学习第一篇:变量,数据类型,运算符,流程控制(简介)

    一.安装和配置jdk 1.jdk是什么? (1).jdk全称是Java Development Kit, Java开发工具包; (2).jdk是sun公司开发的; (3).jdk主要包括:jre(Ja ...

  6. R语言学习 第四篇:函数和流程控制

    变量用于临时存储数据,而函数用于操作数据,实现代码的重复使用.在R中,函数只是另一种数据类型的变量,可以被分配,操作,甚至把函数作为参数传递给其他函数.分支控制和循环控制,和通用编程语言的风格很相似, ...

  7. Scala语言笔记 - 第一篇

    目录 Scala语言笔记 - 第一篇 1 基本类型和循环的使用 2 String相关 3 模式匹配相关 4 class相关 5 函数调用相关 Scala语言笔记 - 第一篇 ​ 最近研究了下scala ...

  8. JVM学习第一篇思考:一个Java代码是怎么运行起来的-上篇

    JVM学习第一篇思考:一个Java代码是怎么运行起来的-上篇 作为一个使用Java语言开发的程序员,我们都知道,要想运行Java程序至少需要安装JRE(安装JDK也没问题).我们也知道我们Java程序 ...

  9. Java并发包下锁学习第一篇:介绍及学习安排

    Java并发包下锁学习第一篇:介绍及学习安排 在Java并发编程中,实现锁的方式有两种,分别是:可以使用同步锁(synchronized关键字的锁),还有lock接口下的锁.从今天起,凯哥将带领大家一 ...

随机推荐

  1. 下载 VM 模板

    使用门户或 PowerShell 在 Azure 中创建 VM 时,系统会自动创建一个 Resource Manager 模板. 可以使用此模板快速复制部署. 该模板包含有关资源组中所有资源的信息. ...

  2. 如何加密 Windows VM 上的虚拟磁盘

    为了增强虚拟机 (VM) 的安全性以及符合性,可以加密 Azure 中的虚拟磁盘. 磁盘是使用 Azure 密钥保管库中受保护的加密密钥加密的. 可以控制这些加密密钥,以及审核对它们的使用. 本文详细 ...

  3. MySQL隐形索引简介

    不可见索引允许您将索引标记为查询优化器不可用.MySQL维护不可见索引,并在与索引关联的列中的数据发生更改时使其保持最新. 默认情况下,索引是可见的.要使它们不可见,您必须在创建时或使用ALTER T ...

  4. .NET Core 使用 EF 出错的解决方法

    在.NET Core 项目钟(类库),使用Entity Framework,建立模型生成数据库时,失败 Could not load assembly 'xxx'. Ensure it is refe ...

  5. .后面是方法不加引号 ,后面是"名"要加引号

    .后面是方法不加引号 ,后面是"名"要加引号  

  6. chrome浏览器访问Google的插件“谷歌访问插件”以及常用插件

    1.解决新版谷歌浏览器无法从该网站添加应用.拓展程序和用户脚本 1.在Google Chrome浏览器的桌面快捷方式上鼠标右键,选择属性(R). 2. 在目标(T)后添加参数   --enable-e ...

  7. Python接口自动化--requests 2

    # _*_ encoding:utf-8 _*_ import json import requests #post请求 payload = {"cindy":"hell ...

  8. React-Native开发笔记 持续更新

    1.css单位转换px2dp 在做页面开发的时候习惯了用rem去做css单位,处理各种尺寸数据,到了React-Native里面做app开发时,rem就不好用了,这个时候就需要转换成另外一个单位,基本 ...

  9. Shell脚本查询进程存活信息

    脚本代码如下: pid=`cat $2` function status_job(){ pcount=`ps -ef |grep $pid |grep -v grep |wc -l` if [ $pc ...

  10. poi 创建excel数据

    public static void main(String[] args) throws Exception { // TODO 设置excel的标题 List<String> exce ...