加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

R语言初学者需要知道的一些常识

(2018-09-20 10:12:29)
分类: Analytics

http://bbs.pinggu.org/thread-4002835-1-1.html


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当向量中有数字和逻辑TF时,R认为这个向量是数值型向量。

> a<-c(1,2,F)

> mode(a)

[1] "numeric"

3当向量中有逻辑TF时以及字符时,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]    4 42 43 56

> rev(a) #根据下标大小,从大到小排序

[1] 56 42  2 43   2

> rev(sort(a)) #配合使用,从大到小排序,注意和上面的区别

[1] 56 43 42    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,]      4

[2,]      5

[3,]      6

> a3<-rbind(a2,c(7,8))  #扩展矩阵的行,这个函数同样可以用在数据框的合并中

> a3

     [,1] [,2]

[1,]      4

[2,]      5

[3,]      6

[4,]      8

> a4<-cbind(a2,c(8,9,10)) #扩展矩阵的列,这个函数同样可以用在数据框的合并中

> a4

     [,1] [,2] [,3]

[1,]        8

[2,]        9

[3,]       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   3 19

> sample(c(1:20),size=12,replace=T)#可重复抽样

[1]  7 11 19 11    9 18    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


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有