1.原子对象
R语言有5类最基本的原子对象:
1) 字符型character
字符型对象用” ”包括。
2) 数值型numeric(real numbers)
数字对象在R中默认为数值型(numeric),如果你需要指定一个数据为整数型,需要在改数字后加上L。如:数字123默认为numeric型,如果需要其为integer型,可表示为123L。
3) 整数型integer
4) 复数型complex
复数的实部用实数表示,虚部用实数+i表示。如:3+2i,2+1i等。
5) 逻辑型logical(True/False)
注:R语言中还有几类特殊对象:
- Inf\-Inf(infinity)表示正负无穷大
- <span style="font-size:18px;"><span style="font-size:18px;">> 1/0
- [1] Inf
- > -1/0
- [1] –Inf</span></span>
- Na(not available)表示缺失值
- <span style="font-size:18px;"><span style="font-size:18px;">> 0/0
- [1] NaN</span></span>
2.赋值与注释
R中赋值采用指向符号“<-”表示,很形象,但是需要按住shift键才能打出符号“<”,并且赋值符号由两个字符组成,因此写代码时非常不方便。
R语言用两个“##”进行注释,##后的代码不被执行,作用域在改行内有效。
- <span style="font-size:18px;"><span style="font-size:18px;">> x<-c(1,2,3)##y<-4
- > x
- [1] 1 2 3
- > y
- 错误: 找不到对象'y'</span></span>
3.向量(vector)
R中向量可以用函数c()(concatenate)创建向量,同一向量内的对象类型必须相同:
- <span style="font-size:18px;"><span style="font-size:18px;">> x <- c(0.5, 0.6) ## numeric
- > x <- c(TRUE, FALSE) ## logical
- > x <- c(T, F) ## logical
- > x <- c("a", "b", "c") ## character
- > x <- 9:29 ## integer
- > x <- c(1+0i, 2+4i) ## complex</span></span>
也可以用函数vector()初始化向量:vector(“datatype”, length=length_of_vector)
- <span style="font-size:18px;"><span style="font-size:18px;">> x<-vector("integer",length=5)
- > x
- [1] 0 0 0 0 0
- > y<-vector("character",length=5)
- > y
- [1] "" "" "" "" ""</span></span>
4.最低共有特性(least common denominator)
在同一个向量中,如果有不同类型的对象,R不会报错,而是遵守低共有特性,将高类型的对象向低类型转换。
- <span style="font-size:18px;">> x<-c(TRUE,2,1.2,3+2i,"Hello")
- > x
- [1] "TRUE" "2" "1.2" "3+2i" "Hello"##
- > x<-c(TRUE,2,1.2,3+2i)
- > x
- [1] 1.0+0i 2.0+0i 1.2+0i 3.0+2i
- > x<-c(TRUE,2,1.2)
- > x
- [1] 1.0 2.0 1.2
- > x<-c(TRUE,2)
- > x
- [1] 1 2</span>
由上例可以看出,基本对象等级由高至低排序为:logic、integer、numeric、complex、character。
5.类型强转
R通过as.datatype(object)函数将对象类型进行强制转换,转换原则也遵循高等级对象可转换为低等级,而低等级对象不能转换为高等级(转换时会丢失数据信息)。
- <span style="font-size:18px;">> x <- 0:6
- > class(x)
- [1] "integer"
- > as.numeric(x)
- [1] 0 1 2 3 4 5 6
- > as.logical(x)
- [1] FALSE TRUE TRUE TRUE TRUE TRUE TRUE
- > as.character(x)
- [1] "0" "1" "2" "3" "4" "5" "6"
- > as.numeric(x)
- [1] NA NA NA
- 警告信息:
- 强制改变过程中产生了NA
- > x<-3+2i
- > as.numeric(x)
- [1] 3
- 警告信息:
- 强制改变时丢弃了虚数部分</span>
6.矩阵
矩阵是二维数组,矩阵中的对象具有相同的类型,可以通过函数matrix创建矩阵,格式为:
m<-matrix(vector,nrow=number_of_rows,ncol=number_of_columns,byrow=logic_value)
- <span style="font-size:18px;">> m<-matrix(nrow=2,ncol=3)
- > m
- [,1] [,2] [,3]
- [1,] NA NA NA
- [2,] NA NA NA
- > m<-matrix(1:6,nrow=2,ncol=3)
- > m
- [,1] [,2] [,3]
- [1,] 1 3 5
- [2,] 2 4 6</span>
矩阵是默认按列填充的,如果需要矩阵按行填充,需要将byrow属性设置为TRUE。
- <span style="font-size:18px;">> m<-matrix(1:6,nrow=2,ncol=3,byrow=TRUE)
- > m
- [,1] [,2] [,3]
- [1,] 1 2 3
- [2,] 4 5 6
- </span>
也可以先创建向量,再通过dim()函数将该向量中的对象加入指定矩阵:
- <span style="font-size:18px;">> a<-c(2,3)
- > a
- [1] 2 3
- > m<-c(1,2,3,4,5,6)
- > dim(m)<-c(2,3)
- > m
- [,1] [,2] [,3]
- [1,] 1 3 5
- [2,] 2 4 6
- </span>
dim()函数也可以用来查看矩阵的维度:
- <span style="font-size:18px;">> dim(m)
- [1] 2 3
- </span>
矩阵也可以通过函数cbind()和rbind()函数将向量合并成矩阵:
- <span style="font-size:18px;">> x<-c(1,2,3)
- > y<-c(4,5,6)
- > z<-c(7,8,9)
- > cbind(x,y)
- x y
- [1,] 1 4
- [2,] 2 5
- [3,] 3 6
- > rbind(x,y)
- [,1] [,2] [,3]
- x 1 2 3
- y 4 5 6
- > rbind(x,y,z)
- [,1] [,2] [,3]
- x 1 2 3
- y 4 5 6
- z 7 8 9
- </span>
7.列表
列表(list)是一种特殊的向量,list可以包含不同类型的对象,甚至包括向量对象和矩阵对象等。列表中每个对象之间用逗号隔开,每个对象索引号用双“[[]]”表示,而每个对象中的元素用单“[]”表示。
- <span style="font-size:18px;">> x<-list("hello",1:4L,3.2,4+5i,TRUE)
- > x
- [[1]]
- [1] "hello"
- [[2]]
- [1] 1 2 3 4
- [[3]]
- [1] 3.2
- [[4]]
- [1] 4+5i
- [[5]]
- [1] TRUE
- </span>
8.因子(factor)
因子一般用来表示分类数据,数据既可以是有序的,也可以是无序的。使用factor表示分类标签比较直观,例如使用“male”“female”优于使用1,2这样的数量值去表示。
- <span style="font-size:18px;">> x <- factor(c("yes", "yes", "no", "yes", "no"))
- > x
- [1] yes yes no yes no
- Levels: no yes
- > table(x)
- x
- no yes
- 2 3
- </span>
levels中对象的顺序,也可以通过参数levels自定义。
- <span style="font-size:18px;">> x <- factor(c("yes", "yes", "no", "yes", "no"),levels=c("yes","no"))
- > x
- [1] yes yes no yes no
- Levels: yes no
- </span>
9.缺失值
is.na()用于测试对象是否为NA,is.nan()用于测试对象是否为NaN。NA是NaN,但NaN不是NA,NaN比Na程度更深。
- <span style="font-size:18px;">> b<-c(1,2,3,NA,4)
- > is.na(b)
- [1] FALSE FALSE FALSE TRUE FALSE
- > is.nan(b)
- [1] FALSE FALSE FALSE FALSE FALSE
- > b<-c(1,2,3,NaN,4)
- > is.na(b)
- [1] FALSE FALSE FALSE TRUE FALSE
- > is.nan(b)
- [1] FALSE FALSE FALSE TRUE FALSE
- </span>
10.数据框
数据框用来储存tabular数据,用data.frame()创建。可以将数据框看作特殊的list集合,每个list长度相同且对应位置的数据类型相同。
- <span style="font-size:18px;">> x<-data.frame(a=1:4,b=c("a","b","c","d"))
- > x
- a b
- 1 1 a
- 2 2 b
- 3 3 c
- 4 4 d
- > nrow(x)
- [1] 4
- > ncol(x)
- [1] 2
- </span>
11.命名
R可以通过函数names()给想了对象命名,通过dimnames()给矩阵命名,同样也可以给列表命名:
- <span style="font-size:18px;">> x<-c(1,2,3,4) ##给向量命名
- > names(x)<-c("one","two","three","four")
- > x
- one two three four
- 1 2 3 4
- > names(x)
- [1] "one" "two" "three" "four"
- > y<-list(one=1,two=2,three=3) ##给列表命名
- > y
- $one
- [1] 1
- $two
- [1] 2
- $three
- [1] 3
- > m<-matrix(1:4,nrow=2,ncol=2)
- > m
- [,1] [,2]
- [1,] 1 3
- [2,] 2 4
- > dimnames(m)<-list(c("one","two"),c("three","four"))
- > m
- three four
- one 1 3
- two 2 4
- </span>
版权声明:本文为博主原创文章,未经博主允许不得转载