1、R语言语法中对大小写很敏感,大小写代表不同含义。
2、R语言中变量名称不能以数字开头,比如100a<-2是错误的。
3、R工作空间(运行时的内存)不会存储求值和打印。比如z<-0,z+1=1,print(z+1),工作空间会保存z<-0,但是不会保存z+1=1,print(z+1)。
4、输入语法时必须使用英文键盘,中文键盘会出错。
5、在R语言中字符型值要加引号,如“red”。
> a<-ttt
错误: 找不到对象'ttt'
> a<-"ttt"
> a
[1] "ttt"
>
6、如果数据中有NA存在,表示这个位置数据遗失,不能进行值的类型描述。也不能用函数来计算,需要计算是可以加上na.rm=T表示忽略NA,但是这个位置并没有去除,使用length可以看到。
> x<-c(10,20,30,NA)
> x
[1] 10 20 30 NA
> mean(x)
[1] NA
> mean(x,na.rm=T)
[1] 20
> length(x)
[1] 4
> x<-c(10,20,30,NA)
> x
[1] 10 20 30 NA
> na.fail(x) #判断至少存在一个NA则返回错误
Error in na.fail.default(x) : 对象里有遺漏值
> na.omit(x) #返回删除NA后的向量
[1] 10 20 30
attr(,"na.action")
[1] 4
attr(,"class")
[1] "omit"
> is.na(x) #判断向量或矩阵或是数据框中的NA
[1] FALSE FALSE FALSE TRUE
> x[!is.na(x)]#!与is.na()配合使用除去NA
[1] 10 20 30
>
7、如果数据中有NULL存在,表示这个变量可以被忽略,而且这个变量不会占据任何空间。
> x<-c(10,20,30,NULL)
> mean(x)
[1] 20
> length(x)
[1] 3
>
四、R的集中对象类型:
向量:vector:数值型,复数型,字符型,逻辑型。不允许其他类型。
数组:array数值型,复数型,字符型,逻辑型。不允许其他类型。
矩阵:matrix数值型,复数型,字符型,逻辑型。不允许其他类型。
数据框:data.frame相同列数据类型必须相同,不同列可以不同。
列表:list每个元素的数据类型都可以不同。
> a<-"100"
> a
[1] "100"
> mode(a) #查看类型
[1] "character"
> as.numeric(a) #as.数据类型()可以实现不同类型数据的转换
[1] 100
> mode(a)
[1] "character"
> mode(as.numeric(a))
[1] "numeric"
> mode(as.complex(a))
[1] "complex"
> a<-10
> as.logical(a)
[1] TRUE
> b<-1
> as.logical(b)
[1] TRUE
> c<--1
> as.logical(c)[1] TRUE
> d<-0
> as.logical(d)#对数值型进行逻辑转换时,只有当数值为零时,转换为逻辑变量是是F
[1] FALSE
>
五、向量:
注意:
1、当向量里有数字和字符两种时,R认为这个向量是字符型向量。
> a<-c(1,2,"nihao")
> mode(a)
[1] "character"
2、当向量中有数字和逻辑T和F时,R认为这个向量是数值型向量。
> a<-c(1,2,F)
> mode(a)
[1] "numeric"
3、当向量中有逻辑T和F时以及字符时,R认为这个向量是字符型向量。
> a<-c(F,"nihao")
> mode(a)
[1] "character"
4、R语言中下标的起始位1而不是0.
> a<-1:10
> a[1]
[1] 1
> a[0]
integer(0)
5、向量中删除某一位置的数值
> a<-c(4,3,2,1)
> a<-a[-3]
> a
[1] 4 3 1
6、数值排序
> a<-c(2,4,43,2,42,56)
> sort(a) #从小到大排序
[1] 2 2 4 42 43 56
> rev(a) #根据下标大小,从大到小排序
[1] 56 42 2 43 4 2
> rev(sort(a)) #配合使用,从大到小排序,注意和上面的区别
[1] 56 43 42 4 2 2
7、比较向量中的大小:
> a<-c(1,2,9,4)
> b<-c(4,2,5,6)
> c<-c(6,6.8,9,9)
> pmin(a)
[1] 1 2 9 4
> pmin(a,b,c) #比较a,b,c向量中所有数值的大小并将最小的几个取出组成一个新向量
[1] 1 2 5 4
> pmax(a,b,c)#比较a,b,c向量中所有数值的大小并将最大的几个取出组成一个新向量,向量长度一般要求三个向量或是多个向量相同,如果不同,则R会自动处理,一般形成元素个数最多的。
[1] 6.0 6.8 9.0 9.0
8、向量间交集、并集合补集
> intersect(a,b)#a,b交集
[1] 2 4
> union(a,b) #a,b并集
[1] 1 2 9 4 5 6
> setdiff(a,b)#a,b补集,属于a而不属于b
[1] 1 9
9、矩阵合并
> data1<-c(1:6)
> a2<-matrix(data1,nrow=3,ncol=2)
> a2
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
> a3<-rbind(a2,c(7,8)) #扩展矩阵的行,这个函数同样可以用在数据框的合并中
> a3
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
[4,] 7 8
> a4<-cbind(a2,c(8,9,10)) #扩展矩阵的列,这个函数同样可以用在数据框的合并中
> a4
[,1] [,2] [,3]
[1,] 1 4 8
[2,] 2 5 9
[3,] 3 6 10
> a5<-cbind(a2,c(8,9)) #扩张行或列时,要求向量长度必须相等
Warning message:
In cbind(a2, c(8, 9)) :
number of rows of result is not a multiple of vector length (arg 2)
>
10、随机抽样:
> sample(c(1:20),size=12,replace=F)#不重复抽样,样本大小为12
[1] 20 2 14 17 18 5 10 13 12 4 3 19
> sample(c(1:20),size=12,replace=T)#可重复抽样
[1] 7 11 19 11 6 1 9 18 7 3 8 13
11、自定义函数:
> func<-function(x1,x2=0){ #注意:使用function函数内部定义的数据对象(包括参数形式定义的数据对象)均为局部变量,因此不会改变函数外部同名对象的数值。
+ demo<-x1+2*x2
+ if(x1+x2>=100){300*demo-90}
+ else if(x1+x2>=-90)
+ {9-demo}
+ else {NA}}
> func
function(x1,x2=0){
demo<-x1+2*x2
if(x1+x2>=100){300*demo-90}
else if(x1+x2>=-90)
{9-demo}
else {NA}}
> func(x1=40,x2=0)
[1] -31