【正文】
2,] [3,] (y)%*%(y) [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6 [3,] 7 8 9 數(shù)據(jù)框( ) ? 數(shù)據(jù)框是 S中類似 SAS數(shù)據(jù)集的一種數(shù)據(jù)結(jié)構(gòu)。它是一種特殊的列表對(duì)象,有一個(gè)值為“ ”的 class 屬性,各列表成員必須是向量(數(shù)值型、字符型、邏輯型)、因子、數(shù)值型矩陣、列表,或其它數(shù)據(jù)框。 數(shù)據(jù)框生成 ? 數(shù)據(jù)框可以用 ()函數(shù)生成,其用法與 list()函數(shù)相同,各自變量變成數(shù)據(jù)框的成分,自變量可以命名,成為變量名。 ? d name age height gender 1 趙 20 170 男 2 錢 21 171 女 3 孫 22 175 男 4 李 21 165 女 5 王 20 181 男 ? d[1] name 1 趙 2 錢 3 孫 4 李 5 王 ? d[[1]] [1] 趙 錢 孫 李 王 Levels: 李 錢 孫 王 趙 ? d[[2]][2:3] [1] 21 22 數(shù)據(jù)框引用 ? 引用數(shù)據(jù)框元素的方法與引用矩陣元素的方法相同,可以使用下標(biāo)或下標(biāo)向量,也可以使用名字或名字向量。數(shù)據(jù)框的各行也可以定義名字,可以用 rownames屬性定義。 ? 在使用數(shù)據(jù)框的變量時(shí)可以用“數(shù)據(jù)框名 $變量名”的記法。 ? 注意: S和 R中名字空間的管理是比較獨(dú)特的。 ? 可以連接數(shù)據(jù)框,可以連接列表。 ? print()函數(shù)是一個(gè)通用函數(shù),即它對(duì)不同的自變量有不同的反應(yīng)。它把各項(xiàng)轉(zhuǎn)換成字符串,中間隔以空格連接起來(lái),然后顯示。 format()函數(shù)為一個(gè)數(shù)值向量找到一種共同的顯示格式然后 把向量轉(zhuǎn)換為字符型 。 ? 可以用 width指定輸出寬度,用 digits指定有效位數(shù)(格式為 e,E,g,G,fg時(shí))或小數(shù)點(diǎn)后位數(shù)(格式為 f)時(shí)。, width=2, flag=39。, formatC(r[2], format=39。), 39。, width=2, flag=39。, sep=39。 ? 為避免顯示,可以把結(jié)果賦給一個(gè)臨時(shí)變量名,或者把整個(gè)表達(dá)式作為 invisible() 函數(shù)的參數(shù),這時(shí)不顯示表達(dá)式值。如果不指定列數(shù)則缺省使用 5列。例如: ? cat(1:12, 39。c:/work/39。用 skip參數(shù)可以跳過(guò)文件的開(kāi)始若干行不讀。 ? 如果要讀取一個(gè)數(shù)據(jù)框, S提供了一個(gè) ()函數(shù)。 ? 函數(shù)可以自動(dòng)識(shí)別表列是數(shù)值型還是字符型,并在缺省情況下把字符型數(shù)據(jù)轉(zhuǎn)換為因子(加上 =T可以保留字符型不轉(zhuǎn)換)??梢杂?sep 參數(shù)指定表行各項(xiàng)的分隔符。) x Name score 1 Zhou 3 2 Li Ming 李明 3 Zhang Wang ? 其它一些用法見(jiàn)幫助。,names(cl))。 cat(39。E:/R/Employee 39。names(Edata)39。 reads a file stored by the SPSS 39。 mands and returns a list. ? Usage: (file, =TRUE, =FALSE, =Inf, =FALSE) ? Arguments: file: character variable with the name of the file to read. : Convert variables with value labels into R factors with those levels? : return a data frame? : Only variables with at most this many unique values will be converted to factors : Trim trailing spaces from factor levels? ? Details: This uses modified code from the PSPP project for reading the SPSS formats. Occasionally in SPSS value labels will be added to some values of a continuous variable (eg to distinguish different types of missing data), and you will not want these variables converted to factors. By setting 39。 attribute of the variable. ? If SPSS variable labels are present, they are returned as the 39。 for ways to remove trailing spaces in string data. ? Value: A list (or data frame) with one ponent for each variable in the saved data set. ? Note: If SPSS value labels are converted to factors the underlying numerical codes will not in general be the same as the SPSS numerical values, since the numerical codes in R are always 1,2,3,... ? Author(s): Saikat DebRoy ? Examples: Not run: (datafile) don39。 ? 若干個(gè)表達(dá)式可以放在一起組成一個(gè)復(fù)合表達(dá)式,作為一個(gè)表達(dá)式使用。 ? 例如,如果變量 lambda為缺失值就給它賦一個(gè)缺省值,可用: if((lambda)) lambda 。 print(cbind(x,y))。 } ? 注意“ amp。 ? 在用 S編程序時(shí)一定要時(shí)刻牢記 S是一個(gè)向量語(yǔ)言,幾乎所有操作都是對(duì)向量進(jìn)行的??梢允褂?if ... else if ... else if ... else ...的多重判斷結(jié)構(gòu)表示多分支。 } 這個(gè)例子我們需要使用下標(biāo)的值,所以用 seq(along=x)生成了 x的下標(biāo)向量。從這里我們也可以看出,顯式的循環(huán)經(jīng)常是可以避免的,利用函數(shù)對(duì)每個(gè)元素計(jì)算值、使用 sum等統(tǒng)計(jì)函數(shù)及 apply、 lapply 、 sapply、 tapply等函數(shù)往往可以代替循環(huán)。假設(shè)一共有 365個(gè)生日(只考慮月、日),而且各生日的概率是相等的(這里忽略了閏年的情況以及可能存在的出生日期分布的不均勻)。我們可以盡量用向量運(yùn)算來(lái)實(shí)現(xiàn),速度要快得多: ? x numeric(364) for(n in 1:364) { x[n] =1 prod((365:(365n+1))/365) } 這段程序只用了 1秒。 ? while循環(huán)是在開(kāi)始處判斷循環(huán)條件的當(dāng)型循環(huán),如: ? While (baeps) { c (a+b)/2。 ? 分支和循環(huán)結(jié)構(gòu)主要用于定義函數(shù)。 工作空間管理 ? 前面我們已經(jīng)提到, S在運(yùn)行時(shí)保持一個(gè)變量搜索路徑表,要讀取某變量時(shí)依次在此路徑表中查找,返回找到的第一個(gè);給變量賦值時(shí)在搜索路徑的第一個(gè)位置賦值。模式格式是 UNIX中 grep的格式。 函數(shù)定義 ? S中函數(shù)定義的一般格式為“函數(shù)名 = function(參數(shù)表 ) 表達(dá)式”。cat(\n) 。實(shí)際上,用 source()運(yùn)行的程序不限于函數(shù)定義,任何 S程序都可以用這種方式編好再運(yùn)行,效果與在命令行直接輸入是一樣的。 x[] = y[]。不過(guò),也可以使用“ return( 對(duì)象 )”函數(shù)從函數(shù)體返回調(diào)用者。實(shí)參先與指定了名字的虛參結(jié)合,沒(méi)有指定名字的按次序與剩下的虛參結(jié)合。這種用法在其它語(yǔ)言中是極其少見(jiàn)的, S可以實(shí)現(xiàn)這一點(diǎn)是因?yàn)?S的函數(shù)調(diào)用在用到參數(shù)的值時(shí)才去計(jì)算這個(gè)參數(shù)的值(稱為“懶惰求值”),所以可以在調(diào)用時(shí)缺少某些參數(shù)而不被拒絕。)} ? f(c(5,1,2), c(9, 4, 7)) 1 4 作用域 ? 函數(shù)的虛參完全是按值傳遞的,改變虛參的值不能改變對(duì)應(yīng)實(shí)參的值。但是也要注意,函數(shù)中的顯示函數(shù)調(diào)用時(shí)局部變量 x還沒(méi)有賦值,顯示的是全局變量 x 的值。 ? 對(duì)任何程序語(yǔ)言,最基本的調(diào)試手段當(dāng)然是在需要的地方顯示變量的值。, x, 39。y = 39。 =(yx)。\n39。 browser() 。在 R的 browser()狀態(tài)下用 n命令可以進(jìn)入單步執(zhí)行狀態(tài),用 n或者回車可以繼續(xù),用 c可以退出。但是,如果要用 S編制計(jì)算量較大的程序,或者程序需要發(fā)表,就需要注意一些 S程序設(shè)計(jì)的技巧。核回歸是非參數(shù)回歸的一種,假設(shè)變量 Y與變量 X之間的關(guān)系為: : n=1:10。,x) 例 1 對(duì) n=1,2,…,10, 求 xn= 的值 10sin??n source(39。將 10000元錢存入銀行,問(wèn)多長(zhǎng)時(shí)間會(huì)連本帶利翻一番? source(39。E:/39。cat(39。,header=T,sep=39。210。187