R语言基础学习笔记
學習R語言筆記:
參考書籍:《R語言入門教程》、《R語言初學者指南》
R數據類型: 1. R基本數據類型(或稱為原子類型):數值型(numberic) 1,2,3.33復數型(complex) 1+2i字符型(character) "hello world"邏輯型(logical) FALSE/TRUE #注意為大寫> a <- 100> mode(a) ##mode函數求數據模式[1] "numeric"> b <- 1+2i> mode(b)[1] "complex"> d <- "hello word"> mode(d)[1] "character"> c <- FALSE> mode(c)[1] "logical"2.基本數據對象:向量(vector)、矩陣、因子、列表、數據框、函數類型識別對象類型可以通過is函數返回的布爾值來判斷:is.array()is.matrix()is.list()is.data.frame()is.factor()is.ordered()typeof()函數可以獲得對象中元素的類型(如 logical, integer, double, complex, character, and list)。類型轉換as.vector():將矩陣轉換為矢量。as.array()as.matrix():將數據框轉換為矩陣。as.list()as.data.frame():將矩陣轉換為數據框。matrix():將矢量組合為矩陣。cbind()和rbind():將矢量組合為矩陣。data.frame():將矩陣轉換為數據框。unlist():將列表轉換為矢量。which():將布爾矢量轉換為索引矢量。常用對象可以用typeof()函數獲得對象的類型(type)。可以用mode()函數獲得對象的模式(mode)。可以用storage.mode()函數獲得對象的存儲模式(storage mode)。可以用class()函數獲得對象的所屬的類。數值與向量 2.1 向量與賦值>x <- c(10.4, 5.6, 3.1, 6.4,21.7)創建了一個名為x,包含5個數字的向量。函數c的作用就是將參數中的數值向量以及向量的值首尾相接組成一個新的向量。<- 為賦值操作符(還可以改變方向使用->)。assign函數同樣可以進行賦值操作。>assign("x",c(10.4, 5.6, 3.1, 6.4,21.7))2.2 向量運算向量可以被用于表達式中,操作時按照向量中的元素一個一個進行的。若表達式中的向量不是相同的長度時,表達式中較短的向量會根據它們的長度被循環重復使用,直到長度匹配。> x <- c(1:3)> y <- c(4:9)> x[1] 1 2 3> y[1] 4 5 6 7 8 9> v <- x + y #x長度不夠,將循環從第一個位置開始> v[1] 5 7 9 8 10 12> 逐個元素進行運算的操作符包括: +、-、*、/、^,此外所有普通運算函數都能夠被使用(log、exp、sin、cos、tan、sqrt等)。max和min 作用是選出所給向量中最大的或者最小的元素。length 返回向量中元素的個數(即向量的長度)。sum 向量中所有元素的總和prod 向量中所有元素的乘積mean 計算樣本均值( sum(x)/length(x) )var 計算樣本方差( sum((x - mean(x))\^2)/(length(x)-1) ),若var的參數是一個n*p的矩陣,則函數的值就是一個p*p的樣本協方差矩陣,認為每行是一個p變量的樣本向量。sort 排序函數,其中的元素按照升序排列。2.3 產生規則序列seq 產生一個序列(可以指定起始、結束數據以及步長(或者長度),默認步長為1)> t <- seq(1,3)> t[1] 1 2 3> t <- seq(1,5)> t[1] 1 2 3 4 5> t <- seq(1,5,2)> t[1] 1 3 5> t <- seq(to = 5,from = 1,by = 3)> t[1] 1 4> t <- seq(to = 5,from = 1,length = 1)> t[1] 1> t <- seq(to = 5,from = 1,length = 2)> t[1] 1 5> > t <- seq(to = 5,from = 1,length = 3)> t[1] 1 3 5rep 復制對象(重復的復制)> t <- c(1,2,3)> t[1] 1 2 3> t2 <- rep(t,2)> t2[1] 1 2 3 1 2 3> > t <- c(1,2,3)2.4 邏輯向量邏輯向量的值可以是TRUE、FALSE和NA(not available).邏輯操作包括<, <=, >, >=, == 和 != 。此外還有 &(邏輯與and,元素按位與)、|(邏輯或or,元素按位)、!(取反),&&表達式與、||表達式或。> t <- c(1,2,4,7,5,8)> t[1] 1 2 4 7 5 8> judge <- t > 3> judge[1] FALSE FALSE TRUE TRUE TRUE TRUE> !judge[1] TRUE TRUE FALSE FALSE FALSE FALSE> judge & (1 > 3)[1] FALSE FALSE FALSE FALSE FALSE FALSE> judge | (1 > 3)[1] FALSE FALSE TRUE TRUE TRUE TRUE> judge && (1 > 3)[1] FALSE2.5 缺失值(NA,NaN)一般來講,對一個NA的任何操作都將返回NA。is.na(x) 返回一個邏輯變量,測試x是否為NA或者NaNis.nan(x) 測試一個值是否為NaN> z <- c(1:3,NA)> z[1] 1 2 3 NA> isna <- is.na(z)> isna[1] FALSE FALSE FALSE TRUE> isnan <- is.nan(z)> isnan[1] FALSE FALSE FALSE FALSE> 2.6 字符向量字符向量用引號(')或者雙引號(“)。paste 可以接受任意個參數,并從它們中逐個取出字符并連成字符串,形成的字符串的個數與參數中最長字符串的長度相同。> labs <- paste(c("X","YZ"), 1:5, sep="[]")> labs[1] "X[]1" "YZ[]2" "X[]3" "YZ[]4" "X[]5" > 2.7 索引向量(index vector),數據集子集的選擇與修改選擇一個向量中的子集可以通過在其名稱后追加一個方括號的索引向量來完成。> x <- c('json','bson','xml')> x[1] "json" "bson" "xml" > tmp <- x[1:2]> tmp[1] "json" "bson"2.8 對象的其他類型矩陣、因子、列表、數據框、函數對象,模式和屬性 3.1 固有屬性:模式和長度R所操作的實體是對象。R最基本的結構:數值型(numeric)、復值型(complex)、邏輯型(logical)以及字符型(character)。向量中的值必須是相同模式的。R操作對象還包括列表,它的模式是列表型(list)。列表是對象的有序序列,其中的元素可以是任意模式的。通過模式,可以確定對象的基本類型。模式是對對象的一種特性。對象的另一種特性是它的長度。函數mode和length利益返回對象的模式和長度。(更深入的屬性可以通過attributes獲得。)> x <-c(12,12,12.4)> mode(x)[1] "numeric"> length(x)[1] 3> x <-c(12,12,"12.4")> mode(x)[1] "character"> length(x)[1] 33.2 改變對象的長度一個“空”對象具有的模式。例如:> e <- numeric()> enumeric(0)> mode(e)[1] "numeric"> length(e)[1] 0> e[3] <- 10> e[1] NA NA 10> 3.3 對象的屬性函數attributes(object)將給出當前對象所具有的所有非基本屬性(長度和模式屬于基本屬性)的一個列表。函數attr(object,name)可以被用來選取一個指定的屬性。3.4 對象的類別對象的一個特別屬性,類別,被用來指定對象在R編程中的風格。有序因子與無序因子 因子是一種向量對象,它給自己的組件指定了一個離散的分類(分組),它的組件由其他等長的向量組成。因子分為有序和無序兩種。??????????未理解> colour <- c('G', 'G', 'R', 'Y', 'G', 'Y', 'Y', 'R', 'Y')> col <- factor(colour)> col[1] G G R Y G Y Y R YLevels: G R Y> col1 <- factor(colour, levels = c('G', 'R', 'Y'), labels = c('Green', 'Red', 'Yellow'))> col1[1] Green Green Red Yellow Green Yellow Yellow Red YellowLevels: Green Red Yellow> col2 <- factor(colour, levels = c('G', 'R', 'Y'), labels = c('1', '2', '3'))> col2[1] 1 1 2 3 1 3 3 2 3Levels: 1 2 3> colour <- c('G', 'G', 'R', 'Y', 'G', 'Y', 'Y', 'R', 'Y')> col <- factor(colour)> values <- c(255,255,125,000,255,000,000,125,000)> inmeans <- tapply(values,col,mean)> inmeansG R Y 255 125 0tapply函數的作用是它的第一個參數的組件中所包含的的每個組應用一個函數。4.3 有序因子ordered 函數用來創建有序因子。> score <- c('A', 'B', 'A', 'C', 'B')> score1 <- ordered(score, levels = c('A', 'B', 'C'))> score1[1] A B A C BLevels: A < B < C數組和矩陣 5.1 數組數組是一個有遞增下標表示的數據項的集合。一個矩陣就是一個2維數組。維數向量中的值規定了下標k的上限。下限一般為1。如果需要在R中以數組的方式處理一個向量,則需要含有一個維數向量作為他的dim屬性。如:> z <- c(1,2,3,4,5,6)> dim(z) <- c(2,3) #c(2,3) 是z的維度向量> z[,1] [,2] [,3][1,] 1 3 5[2,] 2 4 6還可以用matrix()和array()這樣的函數來賦值> array(1:6,c(2,3)) #數組函數[,1] [,2] [,3][1,] 1 3 5[2,] 2 4 6> matrix(1:6,2,3) #矩陣函數[,1] [,2] [,3][1,] 1 3 5[2,] 2 4 6> 5.2 數組的索引和數組的子塊數組中的單個元素可以通過下標來索引。還可以通過下標索引向量來指定一個數組的子塊。> m <- matrix(1:6,2,3)> m[,1] [,2] [,3][1,] 1 3 5[2,] 2 4 6> m(1,)[1] 1 3 5> m[1,1][1] 1> 5.3 索引數組通過索引數組來指定數組中的某些元素。> a <- array(1:20,dim=c(4,5))> i <- array(c(1:3,3:1),dim=c(3,2))> a[,1] [,2] [,3] [,4] [,5][1,] 1 5 9 13 17[2,] 2 6 10 14 18[3,] 3 7 11 15 19[4,] 4 8 12 16 20> i[,1] [,2][1,] 1 3[2,] 2 2[3,] 3 1> a[i] #索引數組a中[1,3]、[2,2]、[3,1]位置上的數據[1] 9 6 3> a[i] <- 0> a[,1] [,2] [,3] [,4] [,5][1,] 1 5 0 13 17[2,] 2 0 10 14 18[3,] 0 7 11 15 19[4,] 4 8 12 16 20> 5.4 向量,數組的混合運算1)表達式從左到右被掃描。2)參與運算的任意對象如果大小不足,將會被重復使用直到與其他參與運算的對象等長。3)當較短的向量和數組在運算中相遇時,所有的數組必須具有相同的dim屬性,或者返回一個錯誤。?????4)如果有參與運算的向量比參與運算的矩陣或數組長,將會產生錯誤。????????5)如果數組結構正常聲稱,并且沒有錯誤或者強制轉換被用于向量上,那么得到的結果與運算的數組具有相同的dim屬性。??????5.5 兩個數組的外積外積操作符是%o%。如果a,b是兩個數組型數組,他們的外積是一個數組,其維數向量由二者的維數向量連接而成(與順序有關),而其數據向量由a的數據向量和b的數據向量中所有元素的所有可能乘積組成的。>ab <- a %o% b或者>ab <- outer(a,b,"*")> a <- array(c(1:4),dim=c(2,2))> b <- array(c(5:8),dim=c(2,2))> ab <- a %o% b> ab, , 1, 1 #b[1,1]數據乘以數組a[,1] [,2][1,] 5 15[2,] 10 20, , 2, 1 #b[2,1]數據乘以數組a[,1] [,2][1,] 6 18[2,] 12 24, , 1, 2 #b[1,2]數據乘以數組a[,1] [,2][1,] 7 21[2,] 14 28, , 2, 2 #b[2,2]數據乘以數組a[,1] [,2][1,] 8 24[2,] 16 32>5.6 數組的廣義轉置aperm(a, perm) 函數用來對一個數組進行排列,參數perm必須是正數1,....,k的一個排列,此處k是a下標的個數。該函數得到一個與a相同大小的數組,原有的維被perm[j]給定的新維取代。> a <- matrix(1:6,2,3)> b <- aperm(a,c(2,1))> a[,1] [,2] [,3][1,] 1 3 5[2,] 2 4 6> b[,1] [,2][1,] 1 2[2,] 3 4[3,] 5 6> 其實這就是矩陣的倒置,可以直接使用函數t來實現轉置> a <- matrix(1:6,2,3)> b <- t(a)> a[,1] [,2] [,3][1,] 1 3 5[2,] 2 4 6> b[,1] [,2][1,] 1 2[2,] 3 4[3,] 5 6> 5.7 專門的矩陣功能矩陣僅僅是一個雙下標的數組。R包含很多專門針對矩陣的數據操作。如: t->轉置函數 nrow->返回矩陣的行數 ncol->返回矩陣的列數 5.7.1 矩陣乘法操作符: %*% 如: A、B是同樣大小的矩陣> A * B #是相應位置上的元素的乘積組成的矩陣> A %*% B #是矩陣乘積 ????????執行出錯?crossprod 函數產生一個交叉乘積(cross product),即crossprod(X,Y)與t(X) %*% Y達成相同的效果,但crossprod的效率更高。若省去第二個參數,相當于第一個參數與自己做運算。diag 若參數是一個向量,則diag(v)返回一個由v的元素為對角元素的對角矩陣;若參數是一個矩陣,diag(m)返回一個由M主對角元素組成的向量。若參數只是一個數值,diag(k)則返回一個k X k的單位矩陣> k <- 3> diag(k)[,1] [,2] [,3][1,] 1 0 0[2,] 0 1 0[3,] 0 0 1> > v <- c(1,2,3)> diag(v)[,1] [,2] [,3][1,] 1 0 0[2,] 0 2 0[3,] 0 0 3> m <- matrix(1:6,2,3)> diag(m)[1] 1 45.7.2 線性方陣和矩陣的逆求解線性方程是矩陣乘法的逆運算。> b <- A %*% x之后,若只有A和b被給出,則向量x是線性方程的解。在R中> solve(A,b)5.7.3 特征值和特征向量eigen(Sm) 返回一個對稱矩陣的特征值和特征向量。其結果是有名為values和vectors的兩部分組成的列表。> sm <- diag(v)> sm[,1] [,2] [,3][1,] 1 0 0[2,] 0 2 0[3,] 0 0 3> eigen(sm)$values[1] 3 2 1$vectors[,1] [,2] [,3][1,] 0 0 1[2,] 0 1 0[3,] 1 0 0> 5.8 奇異值分解與行列式 5.9 最小二乘擬合及QR分解lsfit() 函數返回由最小二乘擬合的結果組成的列表。>ans <- lsfit(X,y) #其結果返回最小二乘擬合的結果,其中y是觀測值向量,X為設計矩陣。.........5.10 構建分區矩陣,cbind()和rbind()cbind 按照列(水平方向)的方式將矩陣連接到一起。rbind 按照行(垂直方向)的方式將矩陣連接到一起。> x <- cbind(1,2,3)> y <- rbind(1,2,3)> x[,1] [,2] [,3][1,] 1 2 3> y[,1][1,] 1[2,] 2[3,] 3> 5.11 連接函數c(),針對數組的應用cbind和rbind是具有dim屬性的連接函數,而c函數則沒有,它會清除所有的dim、dimnames屬性。> x <- cbind(1,2,3)> x[,1] [,2] [,3][1,] 1 2 3> c(x)[1] 1 2 3> 5.12 由因子生成頻數表。。。。。。。。。???列表和數據幀 6.1 列表列表是有稱做組件的有序對象集合構成的對象。(列表其實就是一種映射關系)組件并不要求他們是相同模式或類型。一個列表可以包含數值向量,邏輯值,矩陣,復值向量,字符數組和函數等等。> lst <- list(name = "Fred",wife = "Mary",no.child = 3,child.ages = c(12,15,17))> lst$name[1] "Fred"$wife[1] "Mary"$no.child[1] 3$child.ages[1] 12 15 17> 訪問組件的方式:1)組件是被編號了的,可以通過編號來指定列表的組件。使用[[1]]雙中括號來引用。> lst[[1]] #編號從1開始[1] "Fred"> lst[[4]][1] 12 15 17> 2)列表的組件還可以通過組件的名字來引用,如:(listname$component name)> lst$name #組件的名稱可以縮寫,可縮寫的程度是只要能令組件被唯一識別就行,如:lst$na[1] "Fred"> 3)在雙層方括號中使用列表組件的名稱來引用> lst[["name"]] #這樣使用,測試過,組件名稱不能使用縮寫[1] "Fred"length 函數可以返回列表組件的個數(即長度)。6.2 構建和修改列表list 函數從現有的對象中建立新的列表。(組件的名稱可以被省略,此時組件將只是被編號)也可以通過制定額外組件的方式來擴展列表。> lst["addrs"] <- "hangzhou" 6.2.1 連接列表(c函數)c 函數的參數為列表時,其結果也是一個模式為列表的對象,由參數中的列表作為組件依次連接而成。> list.A <- c(1,2)> list.B <- "hhaha"> list.C <- list(3,4,5)> list.ABC <- list(list.A, list.B ,list.C)> list.ABC[[1]][1] 1 2[[2]][1] "hhaha"[[3]][[3]][[1]][1] 3[[3]][[2]][1] 4[[3]][[3]][1] 56.3 數據幀數據幀是類別為"data.frame"的列表。下面對列表的限制對數據幀也有效:1) 組件必須是向量(數值型,字符形,邏輯型),因子,數值矩陣,列表,或其他數據幀2) 矩陣,列表,數據幀向新數據幀提供的變量數分別等于它們的列數,元素數和變量數3) 數值向量,邏輯值和因子在數據幀中保持不變,字符向量將被強制轉化為因子,其水平是字符向量中所出現的值。4) 數據幀中作為變量的向量結構必須具有相同的長度,而矩陣結構應當具有相同的行大小6.3.1 創建數據幀1)data.frame 對于滿足數據幀的列(組件)限制的對象,可以通過函數data.frame來構建數據幀。2)as.data.frame 如果一個列表的組件與數據幀的限制一致,該列表可以同個這個函數來強制轉化為一個數據幀。3)read.table 最簡單的方法,是使用該函數從外部文件中讀取整個數據幀。> dataframe <- as.data.frame(lst)> dataframename wife no.child child.ages addrs1 Fred Mary 3 12 hangzhou2 Fred Mary 3 15 hangzhou3 Fred Mary 3 17 hangzhou> 6.3.2 attach()與detach()標記$,在組件中使用不是非常方便。可以有替代的attach方法是列表或者數據幀的組件暫時像變量一樣可見。> lst <- list(name = "Fred",wife = "Mary",no.child = 3,child.ages = c(12,15,17))> lst$name[1] "Fred"$wife[1] "Mary"$no.child[1] 3$child.ages[1] 12 15 17> attach(lst)> name[1] "Fred"> wife[1] "Mary"> no.child [1] 3> child.ages[1] 12 15 17> 使用attach的方法,得到的來自列表和數據幀的變量僅在他們自己的權限范圍內有效。也就是若對其變量的值進行改變,并不會影響原來列表和數據幀的值,不會進行覆蓋。若需要對數據幀本身做永久的改變的話,最簡單的方式還是得用$標記。數據幀被覆蓋完之后,此時attach得到的變量不會進行更新,得先detach,再重新掛接(attach),才可見。(若已經某組件名稱的變量,則attach將會發生錯誤)attach: 1)需保證變量的唯一性 2)訪問數據前,首先執行detach命令6.3.3 管理搜索路徑search 函數將顯示目前的搜索路徑。對于用來跟蹤已掛接或已卸載的數據幀和列表(以及功能包)是比較有用的。ls()(或objects())命令可以用來檢查搜索路徑任意位置上的內容從文中讀取數據 7.1 函數read.tanle()直接將整個數據幀讀出,所有文件需符合特定的格式:1)第一行提供數據幀的每個變量的名稱2)每一行包含一個行標號(必須是在第一個位置)和其他各變量的值(若文件的第一行所包含的項目比第二行少,也認為是有效的。)如:Price Floor Area Rooms Age Cent.heat01 52.00 111.0 830 5 6.2 no02 54.75 128.0 710 5 7.5 no> HousePrice <- read.table("houses.data")此外,可以省略行標號,使用默認的行標號Price Floor Area Rooms Age Cent.heat52.00 111.0 830 5 6.2 no54.75 128.0 710 5 7.5 no> HousePrice <- read.table("houses.data", header=TRUE) #選項header=TRUE說明文件的第一行是表頭行,由此可知文件的格式中不包 括行標號。7.2 函數scan()從鍵盤或文件中讀取數據,并存入向量或者列表中。>inp <- scan(file,what)第一個參數是文件名,若為空,則從鍵盤讀入數據。(鍵盤輸入時,結束輸入是可以用Ctrl+Z,或者輸入一個空格)。第二個參數用于確定讀入數據的模式。如:list("",0,0)指定讀入到列表中,列表有三項,且列表第一項是字符型,第二三項是數值型。若為0,則指定讀入到一個數值向量中,若為""則指定讀入到字符向量中。> inp <- scan("",0)1: 10002: 20003: Read 2 items> inp[1] 1000 2000> inp <- scan("","")1: hello2: world3: Read 2 items> inp[1] "hello" "world"> inp <- scan("",list("",0,0))1: "hello" 100 2002: Read 1 record> inp[[1]][1] "hello"[[2]][1] 100[[3]][1] 200> 7.3 內建數據集的存取內建數據集必須通過data函數載入。data() #獲取基本系統提供的數據集列表data(infert) #載入名為infert的數據集7.3.1 從其他R功能包中載入數據如:data(package="nls")data(Puromycin, package="nls") #載入nls數據包 Puromycin數據集library(nls) #掛接nls功能包,若nls包不存在,則出錯data() #查看數據集data(Puromycin) #載入Puromycin數據集7.4 編輯數據在使用一個數據幀或矩陣時,edit提供了一個獨立的工作表式編輯環境。>xnew <- edit(xold) #對數據集xold進行編輯。并在完成時概率分布 ?????? 8.1 R--作為一個統計表的集合R提供了一套完整的統計表集合。函數可以對累積分布函數P(X<=x),概率密度函數,分位函數求值,并根據分布進行模擬。8.2 檢測數據集合的分布函數summary和fivenum這兩個有輕微差異的摘要,函數stem可以將數值顯示出來(莖葉圖"stem and leaf plot")hist繪制直方圖。。。。。。。。8.3 單樣本和兩樣本檢驗對兩個樣本的各方面進行比較,功能包ctest。語句組、循環和條件操作 9.1 表達式語句組R語言是一種表達式語言,也就是說其命令類型只有函數或表達式,并由它們返回一個結果。命令可以通過花括號來分組。9.2 控制語句 9.2.1 條件執行:if語句>if (exp_1) exp_2 else exp_3if/else結構的向量版本是函數ifelse,其形式為ifelse (condition,a,b),產生函數結果的規則是:如果condition[i]為真,對應a[i]元素,反之對應b[i]元素。 9.2.2 重復執行:for循環,repeat 和 while>for (name in exp_1) exp_2name是循環變量,exp_1是一個向量表達式,而exp_2經常是一個表達式語句組,其中的子表達式僅僅以形式名稱(dummy name)進行操作,和語句組外表達式的名稱無關。exp_2隨著name一次取exp_1結果向量的值而被多次重復運行。> lst <- c(1,2,3,4)> lst[1] 1 2 3 4> for (i in lst){+ print(lst[i])+ }[1] 1[1] 2[1] 3[1] 4> 循環功能:>repeat(exp)>while (condition) expbreak語句可以用來中斷任何循環,next語句可以中止一個特定的循環,跳至下一個。(清屏 ctrl+l)函數 函數的定義需要通過下面這種形式的賦值:函數的定義:>name <- function(arg_1,arg_2,...) exp函數的調用:>name(exp_1,exp_2,...)10.1 示例> add <- function(d1,d2){ #定義函數名+ d <- d1 + d2; #兩數值相加+ d #返回值+ }> d1 <- 100> d2 <- 200> d <- add(d1,d2) #測試,調用函數> d[1] 300> 10.2 定義新的二元操作符將函數定義二元操作符:>"%!%" <- function(x,y){...} #注意使用引號之后就可以通過x%!%y的方式來使用函數。例如之前使用過的 矩陣乘法運算符 %*% 和 矩陣外積運算符 %o% 也是這種定義方式。10.3 指定的參數默認值在定義函數的參數時,給出其初始值如:add <- function(d1,d2 = 200){...}10.4 參數'...'將一個函數的參數傳遞給另外一個函數。?????????10.5 函數內才賦值在函數內完成的任何一般賦值操作都是局部和臨時的,當函數退出后就丟失。若需要在函數內進行全局和永久的賦值,則需要用到“超賦值”操作符,<<-或者函數assign()10.6 更高級的使用10.7 范疇(scope)函數主體內出現的標識(SYMBOL)可以被分為3類:正式參數、局部變量和自由變量。正式參數:是出現在函數參數列表中的參數 ##形參局部變量:由表達式求值過程中決定的變量自由變量:即不是正式參數也不是局部變量的變量,在賦值之后將變為局部變量> f <- function(x){+ y <- 2*x+ print(x) #正式參數+ print(y) #局部變量+ print(z) #自由變量+ z <- 200+ print(z) #變為局部變量+ }> z <- 2> f(2)[1] 2[1] 4[1] 2[1] 200> z[1] 210.8 定制環境R包含一個基礎初始文件(SITE INITIALIZATION FILE),而且每個目錄下可以有它們自己特定的初始文件。最后還可以使用特殊的函數.First和.Last。基礎初始文件的位置是由R_PROFILE環境變量所決定的。如果這個變量沒有被設定,則R根目錄下子目錄‘etc’將被使用。這個文件中包含了每次R啟動時都會執行的命令。此外一個名為'.Rprofile'的個人配置文件可以被置于任意一個目錄下。如果R在該目錄下被調用,這個配置文件就會使用。如果在啟動目錄下沒有找到‘.Rprofile’文件,那么R就在用戶的根目錄下找'.Rprofile',并使用這個文件。在兩個配置文件之中或者'.RData'映像中,任何名為.First()的函數都具有特殊的意義。它將在R任務的開始處被自動執行。被執行的順序是'Rprofile.site'、'.Rprofile'、'.RData',之后是.First()。后面文件的定義會覆蓋前面文件中的定義。總結
- 上一篇: 怎么在html5中加三角形,css中怎么
- 下一篇: JS 保留两位小数,不足用0补齐;js