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')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM