R语言的数据结构parts 1
R主要的对象类型为 : 标量、向量、矩阵、数组、数据框和列表
2.1 向量以及运算
对于向量 可以 储存 数值型、字符型、逻辑型 的一堆数组 ,执行的函数为 c()
注意 : 单个向量只能拥有相同的类型,无法混杂。
同一个向量内的字符可以同时进行加减乘除进行运算 ,如:
> c(2,3,4,5,6)-2
[1] 0 1 2 3 4
R的整数除法 : %/%
1:10 %/% 3
[1] 0 0 1 1 1 2 2 2 3 3
要比较整数值是否相等,则对其进行 == , 得出是逻辑值 TRUE/FALSE
4==3
[1] FALSE
同样的,如果需要检查是否不相等,则使用 !=
5 != 4
[1] TRUE
== 只能针对整数情况,如果是浮点型数值,则可能会出现bug
如:
sqrt(2)^2 ==2
[1] FALSE
在这时,我们可使用 all.equal 函数对其进行检查。all.equal(sqrt(2)^2,2)
[1] TRUE
2.2 特殊数字
在R语言中主要有四种特殊数值: Inf(即英文的infinite简写)、-Inf、NaN(not-a-number)、NA(not-available)。
主要的计算如下:
> Inf +1[1] Inf
> Inf -1[1] Inf
> Inf + Inf[1] Inf
> NA+1[1] NA
> NA+Inf[1] NA
NA代表缺失值、 NaN 代表不是一个正确的数(如0/0)
2.3 逻辑
R语言中的逻辑判断分为三种; TRUE FALSE NA逻辑运算符:
!代表 非& 代表 与| 代表 或
如:
> x<- c (TRUE,FALSE,NA)> xy <- expand.grid(x=x , y = x)> within(+ xy,+ {and <- x&y+ or <- yd+ not.y <- !y+ not.x <- !x+ })x y not.x not.y or and
1 TRUE TRUE FALSE FALSE TRUE TRUE
2 FALSE TRUE TRUE FALSE TRUE FALSE
3 NA TRUE NA FALSE TRUE NA
4 TRUE FALSE FALSE TRUE TRUE FALSE
5 FALSE FALSE TRUE TRUE FALSE FALSE
6 NA FALSE NA TRUE NA FALSE
7 TRUE NA FALSE NA TRUE NA
8 FALSE NA TRUE NA NA FALSE
9 NA NA NA NA NA NA
其他的逻辑函数为 any 和 all ,表示至少包含一个TRUE 和全部为all,则将返回为 TRUE。
2.4 数字的类型
R中包含三种不同类型的数值变量:浮点值 numeric 、整数 integer 、复数 complex,可通过class来分辨数的种类:如:
> class(sqrt(1:10))
[1] "numeric"
> class(3+i)
Error: object 'i' not found
> class(3+1i)
[1] "complex"
> class(1)
[1] "numeric"
> class(1L) #在1后面添加L将数字变为整数型
[1] "integer"
> class((1:4))
[1] "integer"
同时 class 也可以对字符进行分类> class(1==3)
[1] "logical"
> class("a")
[1] "character"
2.5 因子对字符的转换在很多统计数据中,可能会对相应的数据进行归纳、如win 代表1 、 lose代表 2,我们可以通过factor 因子对其进行转换:
> clubResults <- c( "W" , "L" , "W" , "L" ,"W" )
> results <- factor(clubResults)
> results
[1] W L W L W
Levels: L W
先将其因子化,然后通过对因子水平进行定义以达到效果 :
> levels(results)
[1] "L" "W"
> nlevels(results)
[1] 2
> as.integer(results)
[1] 2 1 2 1 2
采取整数存储可以占据更少的内存 比如在10000次的随机胜负的情况下尤为明显
> new_result <- sample(c("W","L"),10000,replace = TRUE)
> new_result_factor <- as.factor(new_result)
> object.size(new_result)
80136 bytes
> object.size(new_result_factor)
40512 bytes
以上代码使用了函数 sample 随机抽样, object.size 表示可以返回对象的内存分配大小。 可以看出factor化后期占据的内存明显小于 向量化的 。