1. 变量赋值
在R中,可以使用<-
或者=
来给(本地)变量赋值
在给变量赋值前,不需要声明变量。事实上,R中不存在这种概念
变量名: 包含字母、数字、点和下划线,但系统的保留字是不允许的,也不能以数字或一个点后加数字开头
关于命名规则的细节,详情见?make.names
可以用<<-
来对全局变量赋值
另一个变量赋值方法是使用assign
函数,不过assign函数不会检查第一个参数是否为一个有效的变量名
assign("my_local_variable", 1^3 + 12^3, globalenv())
如果想把赋值语句和打印语句都写在一行,有两种选择
- 把多个语句放在一行,其中用分号为分隔符
- 把赋值语句放在括号中
z <- rnorm(5); z
(zz <- rlnorm(5))
2. 特殊数字
R支持4种特殊值:Inf、-Inf、NaN和NA
NaN:not a number 不是一个数字
NA: not available 不可用,缺失值
当算术中涉及NA和NaN时,得到的结果将为两个值之一,取哪个值则取决于所使用的系统
is.finite(x)
is.infinite(x)
is.nan(x)
is.na(x)
3. 逻辑向量
R拥有三种逻辑状态(troolean逻辑):TRUE FALSE NA
在R中有3个向量化逻辑运算符
- ! 非操作
- & 与操作
- | 或操作
any
函数: 输入向量中至少包含1个TRUE值all
函数: 输入向量中只包含TRUE值
4. 类
R中所有变量都有1个类,表明此变量属于什么类型
在R中,没有标量类型(scalar type),最小的数据类型是向量
使用class
函数来找出该变量的类
所有的变量除了类之外,还有一个模式mode,一个存储模式(storage.mode)以及一个内部存储类型(type of
访问)
一般来说type类型和class类是一样的
5. 不同类型的数字
R中有3中不同类别的数值变量
- 浮点值 numeric
- 整数 integer
- 复数 complex
class(3 + 1i) # “i”创建了复数的虚部
class(1L) # 添加L后缀把数字变为整型
class(0.5:4.5) # 冒号操作符返回的值是numeric类
class(1:5) # 除非所有值是整数
即使把R安装在64为操作系统上,所有浮点数都是32位的(双精度),而16位(单精度)的数字是不存在的
.Machine
显示R的数字属性信息
R中最大的全精度浮点数是1.8e308
最小正数2.2e-308
最大整数2 ^ 31 -1
6. 其它通用类
字符character 用于存储文本
因子factor 存储类别数据,拥有标签的整数
原始值raw 存储二进制数据
R 不区分整个字符串和单个字符
因子相关函数factor
创建因子levels
查看因子水平nlevels
查看因子数
gender <- factor(c("male", "female", "female", "male", "female"))
## [1] male female female male female
## Levels: female male
这些标签被限制在称为因子水平(levels of factor)的特定值中
levels(gender)
## [1] "female" "male"
nlevels(gender)
## [1] 2
默认情况下,因子水平按字母顺序排序
在底层,因子的值被存储为整数而非字符,可以调用as.integer
查看
整数存储方式,令内存的使用非常高效,可以使用object.size
来查看每个对象的内存分配大小
32位和64位系统中变量所占用的内存数量是不一样的,所以在不同情况下,
object.size
将返回不同的值
as.integer(gender)
## [1] 2 1 1 2 1
操作因子水平的内容时,应先把因子转换为字符串后再处理,可使用as.character
函数完成转换
as.character(gender)
## [1] "male" "female" "female" "male" "female"
原始变量
raw存储向量的原始字节。每个字节由1个2位的十六进制值表示,主要用于保存输入的二进制文件的内容,因而比较少见as.raw
函数可将0-255间的整数转换为原始值,范围外的数字为0,分数和虚部会被丢弃charToRaw
函数将字符串转换为原始值