R语言-实用功能性语句1

  R常用语句汇总整理,方便查找调用!!!

目录概览

1)R支持自动补全(Tab|键|命令)

2)清除单个变量使用rm()函数

3)清除内存中所用的变量

4)更改小数点后显示数字位数

5)R工作目录的设置

6)当R启动后,R在内存中会自动加载若干Package|R初始状态载入包列表

7)保存自己的工作

8)查看函数的代码

9)查看前(后)几行数据

10)定义数据类型

11)with() 函数的用法

12)向量去重

13)函数的编辑

14)R语言屏幕输出

15)输入输出

16)网络浏览

17)数据框按照某一列排序

18)小数取整

19)**查看某个元素是否在向量里面,用 %in% **

20)求某个日期的前一天

21)输出字符串时要换行,print 中 \n 是无效的,要用 cat

22)数据框行数、列数(标签)操作

23)**把数据框按照某一列的不同值切分成几个数据框,用 split() **

24)计算程序运行的时间

25)用cut()函数将一般的数据转换成因子或有序因子

26)NULL是空,NULL是气,NULL在R中就是空气

27)list不是万能的,但没有list是万万不能的

28)创建“空”值很淡定,要么空来要么0

29)对象转换要小心,data.frame是陷阱

30)多个else/if别担心,switch()函数来帮助


1)R支持自动补全(Tab|键|命令)

		Tab

2)清除单个变量使用rm()函数

		rm()

3)清除内存中所用的变量

		rm(list = ls(all = TRUE)) 

4)更改小数点后显示数字位数

		# options(digits= ),digits后面的参数为1至22的数字,默认为7。
		# options函数还可以改变很多全局选项,如更改提示符(prompt),
		# 是否显示错误信息(show.error.messages)等。
		options(digits = 5)
		options(warn = 1)

5)R工作目录的设置

		# 使用getwd()命令获得R的工作目录(Working Directory)
		getwd() 
		# 使用setwd()设置工作目录位置
		setwd()
		# 可视化设置目录
		choose.dir()
		# 获取当前执行R文件所在目录
		dirname(file.path("","p1","p2","p3","filename"))
		# 删除所有的路径,包括最后一个路径分隔符
		basename(file.path("","p1","p2","p3", c("file1", "file2")))

6)当R启动后,R在内存中会自动加载若干Package|R初始状态载入包列表

		stats     | 常用统计函数
		graphics  | 基础绘图函数
		grDevices | 基础或grid图形设备
		utils     | R工具函数
		datasets  | 基础数据集
		methods   | 用于R对象和编程工具的方法和类的定义
		base      | 基础函数

7)保存自己的工作

		# 它将在R的起始目录保存记忆区(working space)至.RData文件
		save.image()   
		# 保存需要保存的R对象
		save(…,file = ) 

8)查看函数的代码

		# 如何得到函数的代码,通常情况你只需要在R平台下写出你需要查看的函数名,回车即可
		输入(函数名),查看(该函数)代码,如:输入dist,查看dist函数代码

		# 如果函数式类函数(Generic Function),先使用methods()函数查看类函数列表,找到具体需要的函数,然后按照单个函数的情况处理  
		methods(summary)  

9)查看前(后)几行数据

		# 查看一个矩阵|向量|数据框|表格|函数的前(后)几行
		# 随机看看对象中的一些内容,还可以使用car包中的some函数
		  head() 
		  tail() 
		  head(CO2,8)  
		  tail(CO2,8)

10)定义数据类型

		inverses <- vector(mode = "list", 100)
		inverses <- vector(mode = "integer", 100)

11)with() 函数的用法

		# 生成4组完整的数据库并赋给imp 
		imp=mice(nhanes2,m=4) 
		# 生成线性回归模型  
		fit=with(imp,lm(chl~age+hyp+bmi)) 
		# 对建立的4个模型进行汇总  
		pooled=pool(fit)   
		# 展示pooled的内容 
		summary(pooled) 

12)向量去重

		# 有时可能希望删除向量内重复的元素,这时可以使用unique<向量对象>来实现。例如:
		a <- c(1,2,1,4,2,5,1,1)
		unique(a)
		[1] 1 2 4 5

		# 在本例中,对包含重复元素的向量a进行了去重操作。此功能同样也可以使用table函数来实现,不过比较麻烦。例如:
		as.numeric(names(table(a)))

13)函数的编辑

		# R提供了一个edit函数,让使用者可在一个特定的窗口中更改自设函数,使用者便不用在每次更改函数时重打一次。fix函数会使用窗口中的预设编辑器(记事本)。
		> fix(stdev)

		# 输入上述指令后,便会出现一个记事本的窗口,让使用者更改stdev的定义。当更改完毕后关闭窗口,新的定义便会自动储存。R还有内置函数edit ,可以用来编辑R原始码的档案:
		> edit(file="myfile.r")

		# 忠告:在编写函数及R原始码档案时,读者应尽量使用批注及缩排(indent)。这样可使函数及原始码更容易阅读及修改。绝大部分的程序编写员都会遵从这些习惯。

14)R语言屏幕输出

		cat("the total number is:",3+5,"\n")
		print(x, ...)

15)输入输出

		cat,print:显示对象
		sink:输出转向到指定文件
		dump,save,dput,write:输出对象
		scan,read.table,load,dget:读入

16)网络浏览

		browseURL:浏览某个指定的网页
		download.file:下载网络文件到本地

17)数据框按照某一列排序

		# 例如存放学生信息的数据框 rt(name,sex,age,score),按照分数 score 递减排序:
		> rt[order(rt[,4],decreasing=T),]   ## 特别注意后面的逗号别忘了!

18)小数取整

		> x <- 3.555555
		> ceiling(x)
		>  4
		> floor(x)
		>  3
		> trunc(x)
		>  3
		> round(x, digits = 0)
		>  4
		> signif(x, digits = 6)
		>  3.55556

19)查看某个元素是否在向量里面,用 %in% :

		> 34 %in% c(1,2,3,4,34,44)
		[1] TRUE

20)求某个日期的前一天

		> as.Date("2015-07-27") - 1
		[1] "2015-07-26"

21)输出字符串时要换行,print 中 \n 是无效的,要用 cat

		> print("ABC\nDEF")
		> "ABC\nDEF"
		> cat("ABC\nDEF")
		ABC
		DEF

22)数据框行数、列数(标签)操作

		求数据框的行数:nrow(dt)
		求数据框的列数:ncol(dt)
		求数据框的行标签:rownames(dt)
		求数据框的列标签:colnames(dt)

23)把数据框按照某一列的不同值切分成几个数据框,用 split()

		> dt <- data.frame(AA=c(1,2,3), BB=c('a','b','a'))
		> dt
		  AA BB
		1  1  a
		2  2  b
		3  3  a
		> group = split(dt, dt$B)
		> group
		$a
		  AA BB
		1  1  a
		3  3  a
		
		$b
		  AA BB
		2  2  b

24)计算程序运行的时间

		> ptm <- proc.time()
		> a = 1 + 1   ## 此处放你的程序
		> print(proc.time() - ptm)
		用户 系统 流逝 
		0.00 0.00 1.47 

25)用cut()函数将一般的数据转换成因子或有序因子

		exam <- c(98, 97, 52, 88, 85, 75, 97, 92, 77, 74, 70, 63, 97, 71, 98, 65, 79, 74, 58, 59, 60, 63, 87, 82, 95, 75, 79, 96, 50, 88)
		#切分成3组
		exam1 <- cut(exam, breaks = 3) 
		#切分成自己设置的组
		exam2 <- cut(exam, breaks = c(0, 59, 69, 79, 89, 100)) 
		attr(exam1, 'levels'); attr(exam2, 'levels'); attr(exam2, 'class')
		#一个有序因子
		ordered(exam2, labels = c('bad', 'ok', 'average', 'good', 'excellent')) 

26)NULL是空,NULL是气,NULL在R中就是空气

		# 如果表达式(expression)或者函数(function)的值没有定义,那么将返回NULL。在R中,NULL与很多对象合并在一起时,都被忽略掉。比如以下例子:
		
		# NULL is neglected in vector
		> c(1, NA, NULL, FALSE)
		[1]  1 NA  0
		
		# also in matrix
		> matrix(c(1, NA, NULL, 2), c(2, 2))
		     [,1] [,2]
		[1,]    1    2
		[2,]   NA    1
		
		# 警告信息:
		In matrix(c(1, NA, NULL, 2), c(2, 2)) : 数据长度[3]不是矩阵行数[2]的整倍
		
		# also in list
		> tmp <- list(1, 2)
		> tmp[1] <- NULL
		> tmp
		[[1]]
		[1] 2
		> tmp[[1]] <- NULL
		> tmp
		list()
		
		# 如果一定要将列表中的某个个元素赋值为NULL,可以使用list(NULL),比如:
		> tmp <- list()
		> tmp[1] <- list(NULL)
		> tmp
		[[1]]
		NULL
		> is.null(tmp[[1]])
		[1] TRUE

27)list不是万能的,但没有list是万万不能的

  列表(list)在R中是个全能选手、无所不“包”;list还是金箍棒,别看它丫的开始长度(length())短,之后想变长就变长,多长都行。

  这暗示list可以这样用:在循环开始时,我们不知道会产生多少个元素,可以事先规定输出结果为a <- list(),之后赋值;甚至可以按照名字赋值,比如a$add <- exprs

  创建

  如果要创建一个长度为n的、每个元素都为NULL的list,可以使用vector("list", n)

  插入

  如果要在list中插入元素,可以使用append(x, values, after = length(x))函数。append()函数原本是对vector设计的,但是list也能使用。

28)创建“空”值很淡定,要么空来要么0

  如果要创建一个空的对象(对象的长度是0)很容易,比如:

  创建一个长度为0的数值向量

	numeric()或者numeric(0)
	character()或者character(0)
	integer()或者integer(0)可以起到同样的效果
	factor()创建一个长度为0的因子
	注意:factor(0)的长度是1

  创建一个长度为0的矩阵

	matrix(0, 0, 0)
	注意:array()创建的对象长度为1。

  创建一个长度为0的列表

	list()

  创建一个长度为0的data.frame

	data.frame()

29)对象转换要小心,data.frame是陷阱

  R中一些对象转换要格外小心,特别是牵扯到data.frame类型。以下是几个常见的陷阱:

  5.1 “字符型因子”转换为“数值型向量”

	# 需要先转成字符串向量过渡一下:
	as.numeric(as.character(MyFactor))

  5.2 字符和数值因子混搭data.frame

	# 每一列是按照字符型因子保存。留意表面上是数值的一列,它非常危险,特别是排序。一个例子:
	> a1 <- as.factor(as.character(a1))
	> a1
	 [1] 5  6  7  8  9  10 11 12 13 14 15
	Levels: 10 11 12 13 14 15 5 6 7 8 9
	> sort(a1)
	 [1] 10 11 12 13 14 15 5  6  7  8  9
	Levels: 10 11 12 13 14 15 5 6 7 8 9

30)多个else/if别担心,switch()函数来帮助

  如果需要在不同情况下,对变量进行不同的处理,自然会联想到使用多个多个else/if。如果else/if是用来处理的简单的赋值,可以使用switch(EXPR, ...)函数。其中,EXPR是一个表达式,生成一个数字或者字符串;接下来,使用生成的数字和字符串匹配...中的内容。

  所以,我们很容易想到,如果EXPR生成的数字,则对应匹配...的第几个元素,此时...中的变量可以没有名字;如果是字符串,就会严格地匹配...中相同名字的变量;如果EXPR生成是字符串,...中没有相匹配的变量名,则返回NULL;如果...中有一个“无名”变量(即没有对变量赋值),上一种情况下返回该无名变量,相当于最后一个else。比如:

	> switch(1, a = 3, b = 2)
	[1] 3
	> switch(2, aa = 'red', bb = 'blue', cc = 'yellow', 'No value')
	[1] "blue"
	> switch('aa', aa = 'red', bb = 'blue', cc = 'yellow', 'No value')
	[1] "red"
	> switch('dd', aa = 'red', bb = 'blue', cc = 'yellow', 'No value')
	[1] "No value"
	> switch('bb', aa = 'red', bb = , cc = 'yellow')
	[1] "yellow"
	> switch(2, aa = 'red', bb = , cc = 'yellow')
	Error: empty alternative in numeric switch
	> switch('dd', aa = 'red', bb = , cc = 'yellow', 'no', 'value')
	Error: duplicate switch defaults: '"no"' and '"value"'

  注意:

  • 如果EXPR是数字,范围不能超过...的长度。同时,虽然此时...变量可以名字,但是有名字的变量必须有数值,不能学习以上例子中倒数第二种情况,否则会报错。

  • 如果EXPR是字符串,那么会进行自动继承,即前者继承后者。

  • 虽然EXPR是字符串情况可以自动继承,甚至继承一个无名变量,但是无名变量只能有一个。

  • 最后将EXPR明确写出,为了R的版本兼容。

  总结: swich()函数是一个好玩却又危险的函数,一个没有歧义的使用方法是:EXPR明确写出,且返回字符串,...中每一个变量都有确切的值,无名变量只有一个,比如:switch(EXPR='dd', aa = 'red', bb = 'blue', cc = 'yellow', 'no value')

posted @ 2016-05-03 14:31  银河统计  阅读(2368)  评论(0编辑  收藏  举报