1. 变量赋值

在R中,可以使用<-或者=来给(本地)变量赋值
在给变量赋值前,不需要声明变量。事实上,R中不存在这种概念

变量名: 包含字母、数字、点和下划线,但系统的保留字是不允许的,也不能以数字或一个点后加数字开头
关于命名规则的细节,详情见?make.names

可以用<<-对全局变量赋值

另一个变量赋值方法是使用assign函数,不过assign函数不会检查第一个参数是否为一个有效的变量名

assign("my_local_variable", 1^3 + 12^3, globalenv())

如果想把赋值语句和打印语句都写在一行,有两种选择

  1. 把多个语句放在一行,其中用分号为分隔符
  2. 把赋值语句放在括号中
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个向量化逻辑运算符

  1. ! 非操作
  2. & 与操作
  3. | 或操作
    any函数: 输入向量中至少包含1个TRUE值
    all函数: 输入向量中只包含TRUE值

4. 类

R中所有变量都有1个类,表明此变量属于什么类型
在R中,没有标量类型(scalar type),最小的数据类型是向量
使用class函数来找出该变量的类
所有的变量除了类之外,还有一个模式mode,一个存储模式(storage.mode)以及一个内部存储类型(type of访问)

一般来说type类型和class类是一样的

5. 不同类型的数字

R中有3中不同类别的数值变量

  1. 浮点值 numeric
  2. 整数 integer
  3. 复数 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函数将字符串转换为原始值