版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1. 獲取幫助 > help.start() 開啟幫助文檔 >help(solve) 顯示某命令的幫助信息,或者 >?solve 對于由特殊字符指定的功能,這些參數(shù)必須用單引號或雙引號括起來,使之成為一個(gè)“字符串”,如 > help("") 與某個(gè)主題相關(guān)的例子通??梢杂孟旅娴拿畹玫?#160; >
2、0;example(topic)2. 命令簡介 R對大小寫是敏感的;名稱不能以數(shù)字開始; 基本的命令由表達(dá)式或者賦值語句組成。如果一個(gè)表達(dá)式被作為一條命令給出,它將被求值、打印而表達(dá)式的值并不被保存。一個(gè)賦值語句同樣對表達(dá)式求值之后把表達(dá)式的值傳給一個(gè)變量,不過并不會(huì)自動(dòng)的被打印出來; 命令由分號(;)來分隔,或者另起新行; 基本命令可以由花括號(f和g)合并為一組復(fù)合表達(dá)式; 注釋幾乎可以被放在任何地方,只要是以井
3、號( # )開始,到行末結(jié)束; 如果一個(gè)命令在行莫仍沒有結(jié)束,R將會(huì)給出一個(gè)不同的提示符,默認(rèn)的是+。 3. 命令文件的執(zhí)行和輸出轉(zhuǎn)向到文件如果命令存儲(chǔ)于一個(gè)外部文件中,比如工作目錄work中的commands.R,他們可以隨時(shí)在R的任務(wù)中被執(zhí)行> source("commands.R")在Windows中Source也可以由File菜單執(zhí)行。函數(shù)sink,> sink("record.lis")將把所有后續(xù)的輸出由終端轉(zhuǎn)向一個(gè)外部文件,record.lis。命令> si
4、nk() 將把信息重新恢復(fù)到終端上。4. 數(shù)據(jù)的保持與對象的清除R所創(chuàng)建、操作的實(shí)體是對象。對象可以是變量、數(shù)組、字符串、函數(shù)以及由這些元素組成的其它結(jié)構(gòu);> objects() 用來顯示目前存儲(chǔ)在R中的對象的名字。而當(dāng)前存儲(chǔ)的所有對象的組合被稱為workspace;清除對象可以使用rm命令:> rm(x, y, z, ink, junk, temp, foo, bar)所有在一個(gè)R任務(wù)中被創(chuàng)建的對象都可以在文件中被永久保存,并在其它的R任務(wù)中被使用。在每個(gè)R任務(wù)結(jié)束時(shí)用戶都有機(jī)會(huì)保存當(dāng)前有
5、效的所有對象。如果用戶這樣做的話,對象將被寫入當(dāng)前目錄一個(gè)名為.RData。當(dāng)R被再次啟動(dòng)時(shí)R會(huì)從這個(gè)文件中再載入workspace。同時(shí)相關(guān)的命令記錄也被載入。所以,推薦大家在用R進(jìn)行不同的分析時(shí)分別使用不同的工作目錄。5. 基本數(shù)據(jù)結(jié)構(gòu) 數(shù)值型(numeric)1,1.2,3.1415926復(fù)數(shù)型(complex)1+2i字符型(character)A/ “hello world!”邏輯型(logical)TRUE / FALSE6. 基本數(shù)據(jù)對象 向量(vector), 見下節(jié)矩陣(matrix): 更一般的說數(shù)組是向量在多維情況下
6、的一般形式。事實(shí)上它們是可以被兩個(gè)或更多的指標(biāo)索引的向量,并且以特定的方式被打印出來。因子(factors) 提供了一種處理分類數(shù)據(jù)的更簡介的方式。列表(list): 是向量的一種一般形式,并不需要保證其中的元素都是相同的類型,而且其中的元素經(jīng)常是向量和列表本身。數(shù)據(jù)框(data frame):是一種與矩陣相似的結(jié)構(gòu),其中的列可以是不同的數(shù)據(jù)類型??梢园褦?shù)據(jù)框看作一種數(shù)據(jù)"矩陣",它的每行是一個(gè)觀測單位,而且(可能)同時(shí)包含數(shù)值型和分類的變量。函數(shù)( function):能夠在R的workspace中存儲(chǔ)的對象。我們可以通過函數(shù)來擴(kuò)展R的功能
7、。二 簡單操作,數(shù)值與向量2.1 向量與賦值R對命名了的數(shù)據(jù)結(jié)構(gòu)進(jìn)行操作。最簡單的數(shù)據(jù)結(jié)構(gòu)是數(shù)字向量;如,> x <- c(10.4, 5.6, 3.1, 6.4, 21.7) c()是創(chuàng)建函數(shù),賦值運(yùn)算符是'<-',與函數(shù)assign()等價(jià)> assign("x", c(10.4, 5.6, 3.1, 6.4, 21.7) 也可以寫成:> c(10.4, 5.6, 3.1, 6.4, 21.7) -> x如果一個(gè)表達(dá)式被當(dāng)作一個(gè)
8、完整的命令,它的值將被打印到終端但不被儲(chǔ)存。單獨(dú)輸入x則會(huì)將值打印出來。也可以打印倒數(shù):> 1/x> y <- c(x, 0, x) 也可以將向量作為元素。2.2 向量運(yùn)算 操作是按照向量中的元素一個(gè)一個(gè)進(jìn)行的。同一個(gè)表達(dá)式中的向量并不需要具有相同的長度。如果它們的長度不同,表達(dá)式的結(jié)果是一個(gè)與表達(dá)式中最長向量有相同 長度的向量。表達(dá)式中較短的向量會(huì)根據(jù)它的長度被重復(fù)使用若干次(不一定是整數(shù)次),直到與長度最長的向量相匹配。而常數(shù)很明顯的將被不斷重復(fù)。如,> v <- 2*x + y + 1常用運(yùn)算有:+
9、,-,*,/,(次方);log, exp, sin, cos, tan,sqrt等;max和min的作用是選出所給向量中最大的或最小的元素;range函數(shù)的值是一個(gè)長度為2的向量,即c(min(x),max(x)length(x)返回了向量x中元素的個(gè)數(shù),也就是x的長度。sum(x)給出了x中所有元素的總和;prod(x)給出x中所有元素的乘積;mean(x)和var(x),分別計(jì)算樣本均值和樣本方差,這兩個(gè)函數(shù)分別相當(dāng)于sum(x)/length(x),sum(x-mean(x) 2)/(length(x) -1)。如果var()的參數(shù)是一個(gè)n*p的矩陣,那么函數(shù)的值是一個(gè)p*p的樣本協(xié)方差
10、矩陣,認(rèn)為每行是一個(gè)p變量的樣本向量。sort(x)返回一個(gè)與x具有相同長度的向量,其中的元素按招升序排列。還有其他更靈活的排序功能(參見order()和sort.list()。pmax和pmin將返回一個(gè)與最長的向量長度相等的向量,向量中的元素由參數(shù)中所有向量在相應(yīng)位置的最大值(最小值)組成;如果要使用復(fù)數(shù),需要直接給出一個(gè)復(fù)數(shù)部分。因此sqrt(-17)將會(huì)返回NaN(無效數(shù)值)和一個(gè)警告,而sqrt(-17+0i)將按照復(fù)數(shù)進(jìn)行運(yùn)算。2.3 生成序列最簡單的方法是用冒號:,冒號具有最高運(yùn)算優(yōu)先級。例如1:30就是向量c(1,2,. . .,29,30)。30:1構(gòu)造一個(gè)遞減序列。利用se
11、q()函數(shù)構(gòu)造序列:有五個(gè)參數(shù),from, to, by, length, along from, to可以不寫參數(shù)名,seq(2,10)就相當(dāng)
12、于2:10。 by指定步長,默認(rèn)為1,如seq(-5, 5, by=.2)即為c(-5.0, -4.8, -4.6, ., 4.6, 4.8,
13、5.0) length指定序列長度,如seq(length=51, from=-5, by=.2),等同于seq(-5, 5, by=.2)
14、160; along=vector只能單獨(dú)使用,產(chǎn)生一個(gè)“1:length(vector)”序列。類似的函數(shù)是rep(),這個(gè)函數(shù)可以用多種復(fù)雜的方法來
15、160;
16、160; 復(fù)制一個(gè)對象。最簡單的形式是> s5 <- rep(x, times=5)2.4 邏輯向量 TRUE, FALSE, 和NA(not available), 前兩個(gè)可以簡寫為T和F,但T/F并不是系統(tǒng)保留字,可以被用戶覆蓋,所以最好還是不要簡寫。邏輯向量是由條件給出的,如下列語句令temp成為一個(gè)與x長度相同,相應(yīng)位置根據(jù)是否與條件相符而由TRUE或F
17、ALSE組成的向量:> temp <- x > 13邏輯操作符包括<, <=, >, >=,完全相等=和不等于!=,與或非分別為&, |, !。在普通運(yùn)算中,F(xiàn)ALSE當(dāng)做0而TRUE當(dāng)做1。2.5 缺失值NA(not available): 一般來講一個(gè)NA的任何操作都將返回NA。 is.na(x)返回一個(gè)與x等長的邏輯向量,并且由相應(yīng)位置的元素是否是NA來決定這個(gè)邏輯向量相應(yīng)位置的元素是TRUE還是FALSE。 x=NA是一個(gè)與x具有相
18、同長度而其所有元素都是NA的向量。NaN(Not a Number): 由數(shù)值運(yùn)算產(chǎn)生,如0/0, Inf-Inf. is.na(x)對于NA和NaN值都返回TRUE, is.nan(x)只對NaN值返回TRUE。2.6 字符向量 字符串在輸入時(shí)可以使用單引號(')或雙以號("); 在打印時(shí)用雙引號(有時(shí)不用引號)。R使用與C語言風(fēng)格基本相同的轉(zhuǎn)義符, 所以輸入打印的也是, 輸入" 打印引號", n: 換行, t: t
19、ab, b: 回格。字符向量可以通過函數(shù)c()連接;paste()可以接受任意個(gè)參數(shù),并從它們中逐個(gè)取出字符并連成字符串,形成的字符串的個(gè)數(shù)與參數(shù)中最長字符串的長度相同。如果參數(shù)中包含數(shù)字的話,數(shù)字將被強(qiáng)制轉(zhuǎn)化為字符串。在默認(rèn)情況下,參數(shù)中的各字符串是被一個(gè)空格分隔的,不過通過參數(shù)sep=string 用戶可以把它更改為其他字符串,包括空字符串。例如:> labs <- paste(c("X","Y"), 1:10, sep="") 使變量labs成為字符變量c("X1", "Y2
20、", "X3", "Y4", "X5", "Y6", "X7", "Y8", "X9", "Y10")2.7 index vector-數(shù)據(jù)集子集的選擇與修改 任何結(jié)果為一個(gè)向量的表達(dá)式都可以通過追加索引向量(index vector)來選擇其中的子集。1 邏輯的向量。> y <- x!is.na(x) 表示將向量x中的非NA元素賦給y;> (x+1)(!is.n
21、a(x) & x>0 -> z 表示創(chuàng)建一個(gè)對象z,其中的元素由向量x+1中與x中的非缺失值和正數(shù)對應(yīng)的向量組成。2. 正整數(shù)的向量> x6 是x的第六個(gè)元素> x1:10 選取了x的前10個(gè)元素(假設(shè)x的長度不小于10)。> c("x","y")rep(c(1,2,2,1), times=4) 產(chǎn)生了一個(gè)字符向量,
22、長度為16,由"x", "y", "y", "x"重復(fù)4次而組成。3. 負(fù)整數(shù)的向量> y <- x-(1:5) 表示向量y取向量x前5個(gè)元素以外的元素。4. 字符串的向量只存在于擁有names屬性并由它來區(qū)分向量中元素的向量。這種情況下一個(gè)由名稱組成的子向量起到了和正整數(shù)的索引向量相同的效果。> fruit <- c(5, 10, 1, 20)> names(fruit) <- c("orange
23、", "banana", "apple", "peach")> lunch <- fruitc("apple","orange")子集的修改> xis.na(x) <- 0 表示將向量x中所以NA元素用0來代替> yy < 0 <- -yy < 0 表示將向量(-y)中 與向量y的負(fù)元素對應(yīng)位置的元素 賦值給 向量y中 與向量y負(fù)元素對應(yīng)的元素
24、。作用相當(dāng)于:> y <- abs(y)三 對象,模式和屬性3.1 固有屬性:模式和長度對象是R所進(jìn)行操作的實(shí)體,對象可以是向量、列表等,詳見1.6.對象的模式包括numeri,ccomplex,character,logical,list,function,expression等。可以用mode(object)查看。對象的長度是對象的另一固有屬性??梢杂胠ength(object)查看。attribute(object)可以查看更深入的屬性。模式的轉(zhuǎn)換在允許的情況下(大多數(shù)情況都是允許的),R可以完成各種模式的轉(zhuǎn)換。例如:d<-as.character(z),將
25、數(shù)值向量z<-(0:9)轉(zhuǎn)化為字符向量c("0", "1", "2", ., "9")。eger(d)將d轉(zhuǎn)化為數(shù)值向量。R中很多形式為as.something()的函數(shù),可以完成從一個(gè)模式向另一個(gè)模式的轉(zhuǎn)化,或者是令對象取得它當(dāng)前模式不具有的某些屬性。3.2 改變對象的長度> e <- numeric() 產(chǎn)生一個(gè)numeric型的空向量e。character()等類似。此時(shí)長度為對象0。此時(shí)新添加一個(gè)元素會(huì)使e的長度自動(dòng)調(diào)整。>
26、e3 <- 17 令e為一個(gè)長度為3的向量(此時(shí),該向量的前兩個(gè)元素都是NA)縮短(截?cái)啵┮粋€(gè)對象的長度,只需要一個(gè)賦值命令。因此,若alpha是一個(gè)長度為10的對象,下面的命令> alpha <- alpha2 * 1:53.3 屬性的獲取和設(shè)置 函數(shù)attributes(object)將給出當(dāng)前對象所具有的所有非基本屬性(長度和模式屬于基本屬性)的一個(gè)列表。函數(shù)attr(object,name)可以被用來選取一個(gè)指定的屬性。除了為某些特殊的目的創(chuàng)建新屬性這樣特殊的環(huán)境下,這些函數(shù)很少被用到。當(dāng)函數(shù)attr()用在賦值語句左側(cè)時(shí)
27、,既可以是將對象與一種新的屬性關(guān)聯(lián),也可以是對原有屬性的更改。例如> attr(z,"dim") <- c(10,10) 另R將z作為一個(gè)10X10的矩陣看待。3.4 對象的類別對象的一個(gè)特別屬性,類別,被用來指定對象在R編程中的風(fēng)格。比如:如果對象類別"data.frame"則會(huì)以特定方式處理。unclass()可以去除對象的類別。summary()可以查看對象的基本信息(min, max, mean, etc.)四 有序因子和無序因
28、子 因子是一種向量對象,它給自己的組件指定了一個(gè)離散的分類(分組),它的組件由其他等長的向量組成。R提供了有序因子和無序因子。通俗點(diǎn)說,因子就是將對象的值分成不同的組(levels)。用函數(shù)factor()創(chuàng)建一個(gè)因子,levels按序排列(字母序或數(shù)值序)。例如province<-c("四川","湖南","江蘇","四川","四川","四川","湖南","江蘇","湖南","江蘇"
29、;),為province創(chuàng)建因子:> pf<-factor(province) 創(chuàng)建province的因子pf> pf 打印出來1 四川 湖南 江蘇 四川 四川 四川 湖南 江蘇 湖南 江蘇Levels: 湖南 江蘇 四川函數(shù)levels()可以用來觀察因子中有多少不同的levels。假如我們擁有這些省份考生的分?jǐn)?shù):> score<-c(95,86,84,92,84,79,86,99,85,90)函數(shù)tappley()可以用來計(jì)算各省的平均分?jǐn)?shù),函數(shù)tapply()的作用是對它第一
30、個(gè)參數(shù)的組件中所包含的每個(gè)組應(yīng)用一個(gè)參數(shù)三指定的函數(shù)。> smeans<-tapply(score,pf,mean)> smeans 湖南 江蘇 四川 85.66667 91.00000 87.50000 再例如,下面命令會(huì)給出各組的length> tapply(score,pf,length)湖南 江蘇 四川 3 3
31、0; 4 函數(shù)ordered()可以創(chuàng)建有序因子> ordered(province)1 四川 湖南 江蘇 四川 四川 四川 湖南 江蘇 湖南 江蘇Levels: 湖南 < 江蘇 < 四川 五 數(shù)組和矩陣5.1 數(shù)組數(shù)組可以看成一個(gè)由遞增下標(biāo)表示的數(shù)據(jù)項(xiàng)的集合,例如數(shù)值。數(shù)組的生成如果一個(gè)向量需要在R中以數(shù)組的方式被處理,則必須含有一個(gè)維數(shù)向量作為它的dim屬性。維度向量由dim()指定,例如,z是一個(gè)由1500個(gè)元素組成的向量。下面的賦值語句> dim(z) <- c(3,5,100)
32、; 使它具有dim屬性,并且將被當(dāng)作一個(gè)3X5X100的數(shù)組進(jìn)行處理。 c(3,5,100) 就是他的維度向量。還可以用到像matrix()和array()這樣的函數(shù)來賦值。比如> array(1:20, dim=c(4,5)> matrix(1:24, 3,4)數(shù)據(jù)向量中的值被賦給數(shù)組中的值時(shí),將遵循與FORTRAN相同的原則"主列順序",即第一個(gè)下標(biāo)變化的最快,最后的下標(biāo)變化最慢。數(shù)組的運(yùn)算數(shù)組可以在算數(shù)表達(dá)式中使用,結(jié)果也是一個(gè)數(shù)組,這個(gè)數(shù)組由數(shù)據(jù)向量逐個(gè)元素的運(yùn)算后組成,通常參與運(yùn)算的對象應(yīng)當(dāng)具有相同的dim屬性。5.
33、2 數(shù)組的索引和數(shù)組的子塊 數(shù)組中的單個(gè)元素可以通過下標(biāo)來指定,下標(biāo)由逗號分隔,寫在括號內(nèi)。我們可以通過在下標(biāo)的位置給出一個(gè)索引向量來指定一個(gè)數(shù)組的子塊,不過如果在任何一個(gè)索引位置上給出空的索引向量,則相當(dāng)于選取了這個(gè)下標(biāo)的全部范圍。如a2,,a,3,等5.3 索引數(shù)組除了索引向量,還可以使用索引數(shù)組來指定數(shù)組的某些元素。例如:有4X5的數(shù)組a,若要得到a中的a1,3, a2,2 和a3,1這三個(gè)元素,可以生成索引向量i,然后用ai得到它們。> a <- array(1:20,dim=c(4,5) # Generate a 4 by 5 array.>
34、i <- array(c(1:3,3:1),dim=c(3,2)> i,1 ,21, 1 32, 2 23, 3 1> ai1 9 6 3> ai <- 0 # 將這三個(gè)元素用0替換。5.4 向量,數(shù)組的混合運(yùn)算表達(dá)式從左到右被掃描;參與運(yùn)算的任意對象如果大小不足,都將被重復(fù)使用直到與其他參與運(yùn)算的對象等長;當(dāng)較短的向量和數(shù)組在運(yùn)算中相遇時(shí),所有的數(shù)組必須具有相同的dim屬性,否則返回一個(gè)錯(cuò)誤;如果有任意參與運(yùn)算的向量比參與運(yùn)算的矩陣或數(shù)組長,將會(huì)產(chǎn)生錯(cuò)誤;如果數(shù)組結(jié)構(gòu)正常聲稱,并且沒有錯(cuò)誤或者強(qiáng)制轉(zhuǎn)換被應(yīng)用于向量上,那么得到的結(jié)果與參與運(yùn)
35、算的數(shù)組具有相同的dim屬性。5.5 矩陣的運(yùn)算構(gòu)建分區(qū)矩陣:cbind()和rbind(),cbind()按照水平方向,或者說按列的方式將矩陣連接到一起。rbind()按照垂直的方向,或者說按行的方式將矩陣連接到一起。 外積:操作符是%o%:> ab <- a %o% b 或者> ab <- outer(a, b, "*")其中的乘法操作可以由任意一個(gè)雙變量的函數(shù)替代。廣義轉(zhuǎn)置:函數(shù)t(A),或aperm(A, c(2,1);獲取行數(shù)/列數(shù):nrow(A)和ncol(A)分別返回矩陣A的行數(shù)和列數(shù)。矩陣乘
36、法:操作符為%*%;交叉乘積(cross product):crossprod(X,Y)等同于t(X) %*% y,crossprod(X)等價(jià)于crossprod(X, X);diag(v):如果v是向量,diag(v)返回一個(gè)由v的元素為對角元素的對角矩陣。 如果v為矩陣,diag(v)返回一個(gè)由v主對角元素組成的向量。
37、; 如果v只是一個(gè)數(shù)值,那么diag(v)是一個(gè)vXv的單位矩陣。 特征值和特征向量:eigen(Sm)。這個(gè)函數(shù)的結(jié)果是由名為values和vectors的兩部分組成的列表。如果只是需要特征值:eigen(Sm)$values最小二乘擬合即QR分解:lsfit(), qr()。強(qiáng)制轉(zhuǎn)換為向量:as.vector(),或者直接c().解線性方程和求矩陣的逆,奇異值分解與行列式見;六 列表和數(shù)據(jù)幀6.1 列表列表是由稱作組件的有序?qū)ο蠹蠘?gòu)成的對象。組件的模式或類型不一定相同。形如Lst <- li
38、st(name_1=object_1, . . ., name_m=object_m)的賦值將創(chuàng)建一個(gè)包含m個(gè)組件的列表,并根據(jù)參數(shù)中指定的名稱為其命名。(其名稱可以自由選?。H绻鼈兊拿Q被省略,組件將只是被編號。例如:> Lst <- list(name="Fred", wife="Mary", no.children=3,child.ages=c(4,7,9)所使用的組件是被復(fù)制到新的列表中的,對原始對象沒有影響。組件總是被編號的,并且可以通過編號指定。Lst1 即為"Fred",也可以用
39、60;Lst$name,Lst"name"指定。如果Lst4是一個(gè)有下標(biāo)的數(shù)組,Lst41就是它的第一項(xiàng)。區(qū)分Lst1和Lst1,'.'是選擇單個(gè)元素時(shí)使用的操作符,而'.'是一個(gè)一般的下標(biāo)操作符。因此,前者代表列表Lst中的第一個(gè)對象;后者是列表Lst的子列表,僅包含列表的第一項(xiàng)。組件的名稱可以縮寫,可縮寫的程度是只要能令組件被唯一的識(shí)別就可以了。如:Lst$na等價(jià)于Lst$name, Lst$w等價(jià)于Lst$wife。擴(kuò)展列表可以通過指定額外組件的方式。例如> Lst5 <- list(matrix=Mat)連接列表當(dāng)連接函
40、數(shù)c()的參數(shù)為列表時(shí),其結(jié)果也是一個(gè)模式為列表的對象。由參數(shù)中的列表作為組件依次連接而成。> list.ABC <- c(list.A, list.B, list.C)6.2 數(shù)據(jù)幀 數(shù)據(jù)幀是類別為"data.frame"的列表;數(shù)據(jù)幀會(huì)被當(dāng)作各列具有不同模式和屬性的矩陣。數(shù)據(jù)幀按照矩陣的方式顯示,選取的行或列也按照矩陣的方式來索引。創(chuàng)建數(shù)據(jù)幀直接創(chuàng)建:那些滿足對數(shù)據(jù)幀的列(組件)限制的對象可以通過函數(shù)data.frame來構(gòu)建成為一個(gè)數(shù)據(jù)幀> t <- data.frame(home=statef, loot=income, shot=
41、incomef)強(qiáng)制轉(zhuǎn)換:如果一個(gè)列表的組件與數(shù)據(jù)幀的限制一致,這個(gè)列表就可以通過函數(shù)as.data.frame()強(qiáng)制轉(zhuǎn)化為一個(gè)數(shù)據(jù)幀。外部文件:創(chuàng)建數(shù)據(jù)幀最簡單的方法應(yīng)當(dāng)是使用read.table()函數(shù)從外部文件中讀取整個(gè)數(shù)據(jù)幀。數(shù)據(jù)幀和列表的限制1 組件必須是向量(數(shù)值型,字符形,邏輯型),因子,數(shù)值矩陣,列表,或其他數(shù)據(jù)幀;2 矩陣,列表,數(shù)據(jù)幀向新數(shù)據(jù)幀提供的變量數(shù)分別等于它們的列數(shù),元素?cái)?shù)和變量數(shù);3 數(shù)值向量,邏輯值和因子在數(shù)據(jù)幀中保持不變,字符向量將被強(qiáng)制轉(zhuǎn)化為因子,其水平是字符向量中所出現(xiàn)的值;4 數(shù)據(jù)幀中作為變量的向量結(jié)構(gòu)必須具有相同的長度,而矩陣結(jié)構(gòu)應(yīng)當(dāng)具有相同的行大小
42、。 掛接和卸載數(shù)據(jù)幀當(dāng)覺得使用'$'引用數(shù)據(jù)幀元素(如't$home')麻煩時(shí),可以進(jìn)行數(shù)據(jù)幀掛接> attach(t) 這樣可以直接引用數(shù)據(jù)幀內(nèi)的元素,而無需'$',前提是數(shù)據(jù)幀外沒有同名的變量(如name)。掛接后若要對數(shù)據(jù)幀元素進(jìn)行賦值操作,仍需用'$',否則視為賦值給數(shù)據(jù)幀外的元素。賦值后必須要先卸載(detach)再重新掛接后,新值才可見。> detach(t) attach()是具有一般性的函數(shù),即它不僅能夠
43、將目錄和數(shù)據(jù)幀掛接在搜索路徑上,還能掛接其他類別的對象。特別是模式為"list"的對象可以通過相同的方式掛接:> attach(any.old.list) 任何被掛接的對象都可以用detach來卸載,通過指定位置編號或者指定名稱這樣的方式.搜索路徑函數(shù)search()將顯示目前的搜索路徑,可以用來查看數(shù)據(jù)幀/列表的掛接狀態(tài)。ls()(或objects())命令可以用來檢查搜索路徑任意位置上的內(nèi)容。如:ls(), ls(2), ls(t)R可以在搜索路徑中包含至多20個(gè)項(xiàng)目,列表和數(shù)據(jù)幀只能在位置2或更靠后的位置
44、上掛接。 數(shù)據(jù)幀使用慣例 1 將每個(gè)獨(dú)立的,適當(dāng)定義的問題所包含的所有變量收入同一個(gè)數(shù)據(jù)幀中,并賦予合適的、易理解、易辨識(shí)的名稱;2 處理問題時(shí),當(dāng)相應(yīng)的數(shù)據(jù)幀掛接于位置2,同時(shí)在第1層工作目錄下存放操作的數(shù)值和臨時(shí)變量;3 在結(jié)束一次工作之前,將你認(rèn)為對將來有參考價(jià)值的變量通過$標(biāo)記的形式添加到數(shù)據(jù)幀里面,然后detach();4 最后,將工作目錄下所有不需要的變量剔除,并且盡量將剩下多余的臨時(shí)變量都清除干凈。這樣我們可以很簡單的在同一個(gè)目錄下處理多個(gè)問題,而且對每個(gè)問題都可以使用x,y,z這樣的變量名。七 從文件中讀取數(shù)據(jù)7.1 函數(shù)read.table()
45、該函數(shù)可以直接將文件中完整的數(shù)據(jù)幀讀入。此時(shí)文件要符合特定的格式:1 第一行應(yīng)當(dāng)提供數(shù)據(jù)幀中每個(gè)變量的名稱;2 每一行(除變量名稱行)應(yīng)包含一個(gè)行標(biāo)號和各變量的值。3 若沒有表頭(變量名稱行),也沒有行標(biāo)號,只有變量值,則默認(rèn)變量名稱為"v1","v2".4 若有表頭,但沒有行標(biāo)號,則可以指定參數(shù)header=TRUE.7.2 函數(shù)scan()該函數(shù)從鍵盤或文件中讀取數(shù)據(jù),并存入向量或列表中。> inp <- scan(file, what)第一個(gè)參數(shù)是文件名,如“test.txt”,若為“”或空,則從鍵盤讀入數(shù)據(jù);第二個(gè)參數(shù)用于確
46、定讀入數(shù)據(jù)的模式。 如:list("",0,0) 指定讀入到列表中,列表有三項(xiàng),且列表第一項(xiàng)是字符型,第二三項(xiàng)是數(shù)值型。若為0,則指定讀入到一個(gè)數(shù)值向量中,若為“”則指定讀入到字符向量中。7.3 內(nèi)置數(shù)據(jù)集的讀取 R本身提供超過50個(gè)數(shù)據(jù)集,同時(shí)在功能包(包括標(biāo)準(zhǔn)功能包)中附帶更多的數(shù)據(jù)集。與S-Plus不同,這些數(shù)據(jù)即必須通過data函數(shù)載入。> data() #獲得基本系統(tǒng)提供的數(shù)據(jù)集列表,然后通過形如> data(infert) #來載入名為infer
47、t的數(shù)據(jù)集從其他package中載入數(shù)據(jù)集data(package="nls") #查看nls中數(shù)據(jù)集data(Puromycin, package="nls") #讀取nls中Puromycin數(shù)據(jù)集。用library()掛接package后,它的數(shù)據(jù)集也自動(dòng)包含到搜索路徑中了。library(nls) #載入package nlsdata() #查看
48、數(shù)據(jù)集date(Puromycin) #載入Puromycin數(shù)據(jù)集 7.4 編輯數(shù)據(jù)在使用一個(gè)數(shù)據(jù)幀或矩陣時(shí),edit提供一個(gè)獨(dú)立的工作表式編輯環(huán)境。> xnew <- edit(xold) #對數(shù)據(jù)集xold進(jìn)行編輯。并在完成時(shí)將改動(dòng)后的對象賦值給xnew> xnew <- edit(data.frame() #可以通過工作表界面錄入新數(shù)據(jù)。fix()函
49、數(shù)用于直接修改已有的對象,等價(jià)于 x<-edit(x).八 概率分布8.1 R是一個(gè)統(tǒng)計(jì)表集合(略讀) R提供了一套完整的統(tǒng)計(jì)表集合。函數(shù)可以對累積分布函數(shù)P(X<=x),概率密度函數(shù),分位函數(shù)(對給定的q,求滿足P(X<=x) > q的最小x)求值,并根據(jù)分布進(jìn)行模擬。對于所給的名稱,加前綴'd'代表密度(density),'p'代表CDF,'q'代表分位函數(shù),'r'代表模擬(隨即散布)。這幾類函數(shù)的第一個(gè)參數(shù) 是有規(guī)律的,形為dxxx的函數(shù)為x,pxxx的函數(shù)為q,qxxx的函數(shù)為
50、p,rxxx的函數(shù)為n(rhyper和rwilcox是特例,他們的第一個(gè) 參數(shù)為nn)。目前為止,非中心參數(shù)(non-centrality parameter)僅對CDF和少數(shù)幾個(gè)其他函數(shù)有效,細(xì)節(jié)請參考在線幫助。所有pxxx和qxxx的函數(shù)都具有邏輯參數(shù)lower.tail和log.p,而所有的dxxx函數(shù)都有參數(shù)log,這個(gè)是我們可以直接通過- pxxx(t, ., lower.tail = FALSE, log.p = TRUE)獲取,比如說,累積失效函數(shù)(cumulative/integrated hazard function),H(t) =-log(1-F(t),以及更精確的對數(shù)似
51、然(通過dxxx(., log = TRUE))。此外,對于來自正態(tài)分布,具有學(xué)生化樣本區(qū)間的分布還有ptukey和qtukey這樣的函數(shù)。下面是一些例子> # 2-tailed p-value for t distribution> 2*pt(-2.43, df = 13)> # upper 1% point for an F(2, 7) distribution> qf(0.99, 2, 7)8.2 檢測數(shù)據(jù)集的分布 函數(shù)summary和fivenum這兩個(gè)函數(shù)可以給出摘要,后者只給出數(shù)值;函數(shù)stem可以將數(shù)值統(tǒng)計(jì)結(jié)果以類似直方圖的方式顯示出來;函數(shù)hi
52、st()可以繪制直方圖;函數(shù)density和line可以獲得更漂亮的密度圖;功能包fun中的ecdf函數(shù)能繪制經(jīng)驗(yàn)累積分布函數(shù);還可以進(jìn)行擬合正態(tài)分布,覆蓋擬合CDF;還可以繪制Quantile-quantile (Q-Q)圖有助于我們更細(xì)致的檢測其分布形態(tài);8.3 單樣本和兩樣本檢驗(yàn)(略讀)九 語句組、循環(huán)和條件操作 R是一種表達(dá)式語言,也就是說其命令類型只有函數(shù)或表達(dá)式,并由它們返回一個(gè)結(jié)果。語句組由花括號 確定,此時(shí)結(jié)果是該組中最后一個(gè)能返回值的語句的結(jié)果。條件語句> if (expr_1) expr_2 else expr_3
53、其中條件表達(dá)式expr1必須返回一個(gè)邏輯值,操作符&&和|經(jīng)常被用于條件部分。&和|與&&,|的區(qū)別在于,&和|按照逐個(gè)元素的方式進(jìn)行計(jì)算,&&和|對向量的第一個(gè)元素進(jìn)行運(yùn)算,只有在必需的時(shí)候才對第二個(gè)參數(shù)求值。if/else結(jié)構(gòu)的向量版本是函數(shù)ifelse,其形式為ifelse (condition,a,b),產(chǎn)生函數(shù)結(jié)果的規(guī)則是:如果conditioni為真,對應(yīng)ai元素;反之對應(yīng)的是bi元素。根據(jù)這個(gè)原則函數(shù)返回一個(gè)由a,b中相應(yīng)元素組成的向量,向量長度與其最長的參數(shù)等長。循環(huán)語句> for (name in
54、 expr_1) expr_2其中name是循環(huán)變量,expr1是一個(gè)向量表達(dá)式(通常是1:20這樣的序列),而expr2經(jīng)常是一個(gè)表達(dá)式語句組,expr2隨著name依次取expr1結(jié)果向量的值而被多次重復(fù)運(yùn)行。> repeat(expr)> while(condition) expr break語句可以用來中斷任何循環(huán),可能是非正常的中斷。而且這是中止repeat循環(huán)的唯一方式。next語句可以中止一個(gè)特定的循環(huán),跳至下一個(gè).十 編寫自己的函數(shù)10.1 函數(shù)的定義> name <- function(arg_1, arg_2, .) e
55、xpression expression是一個(gè)R表達(dá)式(通常是表達(dá)式語句組),并使用參數(shù)arg_i來計(jì)算出一個(gè)數(shù)值,表達(dá)式的值就是函數(shù)的返回值。函數(shù)調(diào)用的形式通常都是name(expr1,expr2,.)10.2 定義新的二元操作符可以將函數(shù)定義為新的二元操作符:> "%!%" <- function(X, y) . 正如矩陣乘法運(yùn)算符,%*%,和矩陣外積運(yùn)算符%o%10.3 指定參數(shù)和默認(rèn)值 如果被調(diào)用函數(shù)的參數(shù)按照"name = obj"的形式給出,那么參數(shù)的次序可以是任意的。而且,參數(shù)序列可以在開始依次序給
56、出,而將指定名稱的參數(shù)置于后面。因此,如果由一個(gè)函數(shù)fun1被定義為> fun1 <- function(data, data.frame, graph, limit) function body omitted那么函數(shù)可以有多種等價(jià)的使用方法,例如> ans <- fun1(d, df, TRUE, 20)> ans <- fun1(d, df, graph=TRUE, limit=20)> ans <- fun1(data=d, limit=20, graph=TRUE, data.frame=df)默認(rèn)值 :在很多情況下,參數(shù)都會(huì)被賦予一個(gè)
57、普遍適用的默認(rèn)值。> fun1 <- function(data, data.frame, graph=TRUE, limit=20) . 則函數(shù)可以這樣被調(diào)用> ans <- fun1(d, df)此時(shí)與上面三種情況等價(jià),也可以這樣調(diào)用> ans <- fun1(d, df, limit=10)此時(shí)改變了一個(gè)默認(rèn)值。NOTE:參數(shù)可以是任意表達(dá)式,甚至可以是包含其他參數(shù)的表達(dá)式;10.4 額外參數(shù)“.” 當(dāng)需要將一個(gè)函數(shù)的參數(shù)傳遞給另一個(gè)函數(shù)時(shí),可以通過包含一個(gè)額外的參數(shù)"."實(shí)現(xiàn)。fun1 <- function(da
58、ta, data.frame, graph=TRUE, limit=20, .) omitted statementsif (graph)par(pch="*", .)more omissions10.5 全局變量和局部變量函數(shù)內(nèi)的賦值都是局部變量,退出函數(shù)就丟失了。如果要在函數(shù)內(nèi)進(jìn)行永久賦值(定義全局變量),需要用到“超賦值”操作符, <<-或者函數(shù)assign()。10.6 一些高級示例區(qū)組設(shè)計(jì)的效率因子 (E±ciency factors)刪除打印數(shù)組中的所有名稱遞歸的數(shù)值積分10.7 范疇(Scope) 函數(shù)主體內(nèi)出現(xiàn)的標(biāo)識(shí)(symb
59、ol)可以被分為3類;正式參數(shù)、局部變量和自由變量。正式參數(shù)就是出現(xiàn)在函數(shù)參數(shù)列表中的參數(shù),他們的值由實(shí)際的函數(shù)參數(shù)與正式參數(shù)的綁定(binding)過程決定。局部變量是在參數(shù)主體中,由表達(dá)式求值過程決定的變量。自由變量為既不是正式參數(shù)又不是局部變量的變量。賦值之后自由變量成為局部變量。 在R中,自由變量的值由函數(shù)被創(chuàng)建的環(huán)境中與其同名的第一個(gè)變量值決定(我理解為最近的同名變量),這種方式被稱為詞匯式范疇(lexical scope)。而在S中,該值由同名的全局變量決定。例如下面的函數(shù)cube,在R中cube(2)=8,在S中報(bào)錯(cuò)為sq()找不到n。cube <- functi
60、on(n) sq <- function() n*nn*sq()一個(gè)銀行賬戶的例子,詳見R語言筆記。10.8 定制環(huán)境詳見R語言筆記。10.9 類別,通用函數(shù)和對象定位 一個(gè)對象的類別(class)決定了他會(huì)如何被通用函數(shù)(generic function)處理。如果參數(shù)本身沒有任何類別屬性,或者其類別在特定問題中并不滿足通用函數(shù)的要求,通常會(huì)有一個(gè)默認(rèn)的動(dòng)作被執(zhí)行。類別機(jī)制使用戶可以為特定的目的設(shè)計(jì)和編寫通用函數(shù)。使用> methods(class="data.frame")可以查看數(shù)據(jù)幀的通用函數(shù)。使用> methods(plot)可以查看p
61、lot函數(shù)能處理的類別。十一 R的統(tǒng)計(jì)模型待閱。十二 圖形過程在Windows下用window()命令可以打開圖形窗口。12.1 高級繪圖命令 高級繪圖函數(shù),由函數(shù)參數(shù)提供數(shù)據(jù)生成一幅完整的圖形。其中適當(dāng)?shù)淖鴺?biāo)軸,標(biāo)簽和標(biāo)題都自動(dòng)生成了(除非你另外指定了)。高級繪圖命令每次都生成一幅新的圖形,清除當(dāng)前的圖形(如果需要的話)。1 plot()函數(shù) 這是一個(gè)通用函數(shù):生成圖形的類型取決于第一個(gè)參數(shù)的類型或類別(class)。plot(x,y) plot(xy):如果x,y是向量,plot(x,
62、y)生成一幅y對x的散點(diǎn)圖。用包含兩個(gè)元素x,y的一個(gè)列表或一個(gè)兩列的矩陣作為一個(gè)參數(shù)(第二種形式那樣的)也能達(dá)成相同的效果。plot(x):如果x是一個(gè)時(shí)間序列,這個(gè)命令生成一個(gè)時(shí)間序列圖,如果x是一個(gè)數(shù)值型向量,則生成一個(gè)向量值對它們向量索引的土,而如果x是一個(gè)復(fù)向量,則生成一個(gè)向量中元素的虛部對實(shí)部的圖。plot(f) plot(f,y):f是一個(gè)因子對象,y是一個(gè)數(shù)值型向量。第一種形式生成一個(gè)f的條形圖;第二種形式生成y對應(yīng)于f各個(gè)水平的箱線圖。plot(df) plot( expr) plot(y e
63、xpr):df是一個(gè)數(shù)據(jù)幀,y是任意對象,expr是由對象名稱組成的列表,分隔符'+'(例如,a + b + c)。前兩種形式生成分布式的圖形,第一種是數(shù)據(jù)幀中的變量,第二種是一系列被命名的對象。第三種形式生成y對expr中每個(gè)對象的圖。2 顯示多元數(shù)據(jù) 如果X是一個(gè)數(shù)值矩陣或數(shù)據(jù)幀,下面的命令> pairs(X) 生成一個(gè)配對的散點(diǎn)圖矩陣,矩陣由X中的每列的列變量對其他各列列變量的散點(diǎn)圖組成,得到的矩陣中每個(gè)散點(diǎn)圖行、列長度都是固定的。 當(dāng)問題涉及到三、四個(gè)變量時(shí),使用coplot更好些。如果a和b是數(shù)值向量,c是數(shù)值向量或因子對
64、象(全都是相同長度的),下面的命令> coplot(a b | c)對應(yīng)c的某些給定值生成數(shù)個(gè)a對b的散點(diǎn)圖。當(dāng)c是一個(gè)因子時(shí),這個(gè)命令也就是對c的每個(gè)水平生成a對b的散點(diǎn)圖。當(dāng)c是數(shù)值向量的時(shí)候,這個(gè)數(shù)值向量被分為一系列的條件區(qū)間(conditioning intervals),對應(yīng)c的每個(gè)區(qū)間生成一個(gè)a對b的散點(diǎn)圖。區(qū)間的數(shù)量和位置可以通過coplot()的參數(shù)given.values來控制,函數(shù)ervals()也可以用來選擇區(qū)間。我們也可以使用兩個(gè)給定變量通過命令>coplot(a b | c+d)對c和d的每個(gè)聯(lián)合條件區(qū)間生成a對b的散點(diǎn)圖。
65、;函數(shù)coplot()和pairs()都可以使用參數(shù)panel=,這個(gè)參數(shù)可以用來定制我們得到的圖形類型。默認(rèn)的是points()函數(shù),生成一個(gè)散點(diǎn)圖,不過通過在參數(shù)panel=中提供某些其它的低級圖形函數(shù),我們可以生成需要的各種圖形。一個(gè)很有用的函數(shù)例子是panel.smooth()。3 顯示圖形 qqnorm(x) qqline(x) qqplot(x,y)分布比較圖。第一種形式生成向量x對期望正態(tài)分?jǐn)?shù)(一個(gè)正態(tài)記分圖),第二個(gè)在上面的圖上添加一條穿過分布分位點(diǎn)和數(shù)據(jù)分位點(diǎn)的直線。第三個(gè)命令生成x的分
66、位點(diǎn)對y分位點(diǎn)圖,用于分別比較它們的分布。hist(x) hist(x,nclass=n) hist(x,breaks=b, . . . )生成數(shù)值變量x的直方圖。通常會(huì)自動(dòng)選定一個(gè)合理的類別數(shù),不過可以通過nclass=參數(shù)來指定一個(gè)推薦值?;蛘咄ㄟ^參數(shù)breaks=來指定分界點(diǎn)。如果給定了probability=TRUE參數(shù),那么條形圖代表相對頻數(shù)而不是累計(jì)數(shù)。dotchart(x, . . . )創(chuàng)建一個(gè)x中數(shù)據(jù)的點(diǎn)圖(dotchart)。點(diǎn)圖中y軸給出x中數(shù)據(jù)的標(biāo)簽,
67、x軸給出它們的值。它允許對落入某一特定區(qū)間的所有數(shù)據(jù)項(xiàng)方便的進(jìn)行可視化選擇。image(x,y,z, . . . ) contour(x,y,z, . . . ) persp(x,y,z, . . . )生成三個(gè)變量的圖。函數(shù)image是用不同的顏色繪制一些矩形方格來展示z的值,函數(shù)contour通過繪制等高線來展示z的值,函數(shù)persp繪制一個(gè)3D面。4 參數(shù)配置 add=TRUE 強(qiáng)制函數(shù)按照低級圖形函數(shù)的方式操作,將
68、圖形置于當(dāng)前圖形上(僅對某些函數(shù)有效)。axes=FALSE 暫時(shí)禁止坐標(biāo)軸的生成|以便使用axis()函數(shù)添加你自己定制的坐標(biāo)軸。默認(rèn)情況是axes=TRUE,即包含坐標(biāo)軸。log="x" log="y" log="xy" 令x,y或者兩者全都對數(shù)化。這個(gè)參數(shù)對許多函數(shù)都有效,不過不是全部。type=
69、0; 參數(shù)type=控制所生成圖形的類型: type="p" 繪制單獨(dú)的點(diǎn)(默認(rèn)值) type="l" 繪制線 type="b" 繪制由線連接的點(diǎn)(both)
70、; type="o" 將點(diǎn)繪在線上 type="h" 繪制從點(diǎn)到零軸的垂線(high-density) type="s" 階梯式圖。第一種形式中,點(diǎn)由垂線的頂部定義;第二種形式里用底部定義。 type="n" 不繪制。不過坐標(biāo)軸是繪出的(默認(rèn)情況)而且要根據(jù)數(shù)據(jù)繪出坐
71、標(biāo)系統(tǒng)。用來給后續(xù)的低級圖形函數(shù)創(chuàng)建圖形作基礎(chǔ)。xlab=string ylab=string x軸或y軸的標(biāo)簽。使用這些參數(shù)來改變默認(rèn)的標(biāo)簽,通常的默認(rèn)值是調(diào)用高級繪圖函數(shù)時(shí)所使用對象的名稱。main=string 圖表標(biāo)題,位于圖形的頂部,大字體顯示。 sub=string 子標(biāo)題,位于x軸下面,用較小的字體顯示。12.2
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教育培訓(xùn)機(jī)構(gòu)印刷品質(zhì)管理細(xì)則
- 水利工程排水系統(tǒng)安裝協(xié)議
- 公共綠地夜景照明合同(2篇)
- 美食節(jié)噴泉建設(shè)合同
- 消防設(shè)施建造師招聘協(xié)議
- 環(huán)保清潔服務(wù)租賃汽車合同
- 國際展覽館幕墻安裝合同模板
- 2024年融資租賃居間合同
- 2024年租賃合同范例
- 養(yǎng)殖場運(yùn)營經(jīng)理合同范本
- 工程力學(xué)智慧樹知到期末考試答案2024年
- 30題紀(jì)檢監(jiān)察位崗位常見面試問題含HR問題考察點(diǎn)及參考回答
- 裝配式鋼筋混凝土簡支T梁設(shè)計(jì)
- COMMERCIAL INVOICE 商業(yè)發(fā)票
- 大氣課程設(shè)計(jì)-—袋式除塵器
- 普天超五類檢測報(bào)告
- 會(huì)計(jì)師事務(wù)所業(yè)務(wù)培訓(xùn)制度
- CMM2-18錨桿機(jī)(新)說明書
- 12噸汽車起重機(jī)基本技術(shù)規(guī)格資料
- WEB開發(fā)基礎(chǔ)-2021秋本-計(jì)算機(jī)科學(xué)與技術(shù)本復(fù)習(xí)資料-國家開放大學(xué)2022年1月期末考試復(fù)習(xí)資料
- 安徽省政協(xié)機(jī)關(guān)文件材料歸檔范圍
評論
0/150
提交評論