r語言work_r語言work函數 - CSDN

2020-11-22 CSDN技術社區

參考:W.N. Venables, D.M. Smith and the R DCT: Introduction to R – Notes on R: A Programming Environment for Data Analysis and Graphics, 2003. http://bayes.math.montana.edu/Rweb/Rnotes/R.html

前言:關於R

在R的官方教程裡是這麼給R下注解的:一個數據分析和圖形顯示的程序設計環境(A system for data analysis and visualization which is built based on S language.)。

R的源起

R是S語言的一種實現。S語言是由 AT&T貝爾實驗室開發的一種用來進行數據探索、統計分析、作圖的解釋型語言。最初S語言的實現版本主要是S-PLUS。S-PLUS是一個商業 軟體,它基於S語言,並由MathSoft公司的統計科學部進一步完善。後來Auckland大學的Robert Gentleman 和 Ross Ihaka 及其他志願人員開發了一個R系統。R的使用與S-PLUS有很多類似之處,兩個軟體有一定的兼容性。

R is free

R是用於統計分析、繪圖的語言和操作環境。R是屬於GNU系統的一個自由、免費、原始碼開放的軟體,它是一個用於統計計算和統計製圖的優秀工具。
R是一套完整的數據處理、計算和製圖軟體系統。其功能包括:數據存儲和處理系統;數組運算工具(其向量、矩陣運算方面功能尤其強大);完整連貫的統計分析工具;優秀的統計製圖功能;簡便而強大的程式語言:可操縱數據的輸入和輸入,可實現分支、循環,用戶可自定義功能。
R是一個免費的自由軟體,它有UNIX、LINUX、MacOS和WINDOWS版本,都是可以免費下載和使用的,在那兒可以下載到R的安裝程序、各種外掛程序和文檔。在R的安裝程序中只包含了8個基礎模塊,其他外在模塊可以通過CRAN獲得。

R的特點

(1) 有效的數據處理和保存機制。
(2) 擁有一整套數組和矩陣的操作運算符。
(3) 一系列連貫而又完整的數據分析中間工具。
(4) 圖形統計可以對數據直接進行分析和顯示,可用於多種圖形設備。
(5) 一種相當完善、簡潔和高效的程序設計語言。它包括條件語句、循環語句、用戶自定義的遞歸函數以及輸入輸出接口。
(6) R語言是徹底面向對象的統計程式語言。
(7) R語言和其它程式語言、資料庫之間有很好的接口。
(8) R語言是自由軟體,可以放心大膽地使用,但其功能卻不比任何其它同類軟體差。
(9) R語言具有豐富的網上資源

一 入門訓練

1. 獲取幫助

> help.start() 開啟幫助文檔 >help(solve) 顯示某命令的幫助信息,或者 >?solve 對於由特殊字符指定的功能,這些參數必須用單引號或雙引號括起來,使之成為一個「字符串」,> help("[[") 與某個主題相關的例子通常可以用下面的命令得到 > example(topic)

2. 命令簡介

R對大小寫是敏感的;名稱不能以數字開始;基本的命令由表達式或者賦值語句組成。如果一個表達式被作為一條命令給出,它將被求值、列印而表達式的值並不被保存。一個賦值語句同樣 對表達式求值之後把表達式的值傳給一個變量,不過並不會自動的被列印出來;命令由分號(;)來分隔,或者另起新行;基本命令可以由花括號(f和g)合併為一組複合表達式;注釋幾乎可以被放在任何地方,只要是以井號( # )開始,到行末結束;如果一個命令在行末仍沒有結束,R將會給出一個不同的提示符,默認的是『+』。

3. 命令文件的執行和輸出轉向到文件

如果命令存儲於一個外部文件中,比如工作目錄work中的commands.R,他們可以隨時在R的任務中被執行

source(「commands.R」)在Windows中Source也可以由File菜單執行。
函數sink,
sink(「record.lis」)將把所有後續的輸出由終端轉向一個外部文件,record.lis。命令
sink() 將把信息重新恢復到終端上。

setwd("D:\\eclipse_photon\\work\\R")sink("record.list")source("test2.R") #D:\eclipse_photon\work\R目錄下會生成一個record.list文件,裡面內容為[1] "hello world",控制臺則不會輸出sink()source("test3.R") #控制臺會列印[1] "hello world after sink()"

4. 數據的保持與對象的清除

R所創建、操作的實體是對象。對象可以是變量、數組、字符串、函數以及由這些元素組成的其它結構;

> objects() 用來顯示目前存儲在R中的對象的名字。而當前存儲的所有對象的組合被稱為workspace;清除對象可以使用rm命令:> rm(x, y, z, ink, junk, temp, foo, bar)所有在一個R任務中被創建的對象都可以在文件中被永久保存,並在其它的R任務中被使用。在每個R任務結束時用戶都有機會保存當前有效的所有對象。如果用戶這樣做的話,對象將被寫入當前目錄一個名為.RData。當R被再次啟動時R會從這個文件中再載入workspace。同時相關的命令記錄也被載入。所以,推薦大家在用R進行不同的分析時分別使用不同的工作目錄。

5. 基本數據結構

類型實例
數值型(numeric)1,1.2,3.1415926
複數型(complex)1+2i
字符型(character)『A』/ 「hello world!」
邏輯型(logical)TRUE / FALSE

6. 基本數據對象

向量(vector), 見下節
矩陣(matrix)
更一般的說數組是向量在多維情況下的一般形式。事實上它們是可以被兩個或更多的指標索引的向量,並且以特定的方式被列印出來。
**因子(factors) **提供了一種處理分類數據的更簡介的方式。
列表(list)
是向量的一種一般形式,並不需要保證其中的元素都是相同的類型,而且其中的元素經常是向量和列表本身。
數據框(data frame)
是一種與矩陣相似的結構,其中的列可以是不同的數據類型。可以把數據框看作一種數據"矩陣",它的每行是一個觀測單位,而且(可能)同時包含數值型和分類的變量。
函數( function)
能夠在R的workspace中存儲的對象。我們可以通過函數來擴展R的功能。

二 簡單操作,數值與向量

2.1 向量與賦值

R對命名了的數據結構進行操作。最簡單的數據結構是數字向量;如,

x <- c(10.4, 5.6, 3.1, 6.4, 21.7) #c()是創建函數,賦值運算符是'<-',與函數assign()等價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#如果一個表達式被當作一個完整的命令,它的值將被列印到終端但不被儲存。#單獨輸入x則會將值列印出來。也可以列印倒數:x #[1] 10.4 5.6 3.1 6.4 21.71/x #[1] 0.09615385 0.17857143 0.32258065 0.15625000 0.04608295y <- c(x, 0, x) #也可以將向量作為元素y #[1] 10.4 5.6 3.1 6.4 21.7 0.0 10.4 5.6 3.1 6.4 21.7

2.2 向量運算

    操作是按照向量中的元素一個一個進行的。同一個表達式中的向量並不需要具有相同的長度。如果它們的長度不同,表達式的結果是一個與表達式中最長向量有相同長度的向量。表達式中較短的向量會根據它的長度被重複使用若干次(不一定是整數次),直到與長度最長的向量相匹配。而常數很明顯的將被不斷重複。如,

x<-c(1,2,3,4,5)y<-c(3,2,1)v<-x^2+y+1v#[1] 5 7 11 20 28

常用運算有:

  1. +,-,*,/,^(次方);
  2. log, exp, sin, cos, tan,sqrt等;
  3. max和min的作用是選出所給向量中最大的或最小的元素;
  4. range函數的值是一個長度為2的向量,即c(min(x),max(x))
  5. length(x)返回了向量x中元素的個數,也就是x的長度。
  6. sum(x)給出了x中所有元素的總和;
  7. prod(x)給出x中所有元素的乘積;
  8. mean(x)和var(x),分別計算樣本均值和樣本方差,這兩個函數分別相當於sum(x)/length(x),sum((x-mean(x))^2)/(length(x) -1)。如果var()的參數是一個np的矩陣,那麼函數的值是一個pp的樣本協方差矩陣,認為每行是一個包含p變量的樣本向量。
  9. sort(x)返回一個與x具有相同長度的向量,其中的元素按招升序排列。還有其他更靈活的排序功能(參見order()和sort.list())。
  10. pmax和pmin將返回一個與最長的向量長度相等的向量,向量中的元素由參數中所有向量在相應位置的最大值(最小值)組成;
  11. 如果要使用複數,需要直接給出一個複數部分。因此sqrt(-16)將會返回NaN(無效數值)和一個警告,而sqrt(-16+0i)將按照複數進行運算。

> x<-c(0,pi/6,pi/4,pi/3)> c(1,2,3,10)->z> c(2,9,11,22)->zz> c(5,6,7,10,3,1)->zzz> z^2+zzz-zz #結果值得思考[1] 4 1 5 88 2 -4 Warning messages:1: In z^2 + zzz : 長的對象長度不是短的對象長度的整倍數2: In z^2 + zzz - zz : 長的對象長度不是短的對象長度的整倍數> tan(x)[1] 0.0000000 0.5773503 1.0000000 1.7320508> max(x)[1] 1.047198> prod(z)[1] 60> mean(z)[1] 4> var(z)[1] 16.66667> sort(zzz)[1] 1 3 5 6 7 10> pmax(z,zz,zzz)[1] 5 9 11 22 3 9Warning message:In pmax(z, zz, zzz) : 參數值將數據略微回收> pmin(z,zz,zzz)[1] 1 2 3 10 1 1Warning message:In pmin(z, zz, zzz) : 參數值將數據略微回收> sqrt(-16+0i)[1] 0+4i

2.3 生成序列

最簡單的方法是用冒號『:』,冒號具有最高運算優先級。例如1:30就是向量c(1,2,. . .,29,30)。30:1構造一個遞減序列。
利用seq()函數構造序列:有五個參數,from, to, by, length, along,from, to可以不寫參數名,seq(2,10)就相當於2:10。
by指定步長,默認為1,如seq(-5, 5, by=.2)即為c(-5.0, -4.8, -4.6, …, 4.6, 4.8, 5.0)
length指定序列長度,如seq(length=51, from=-5, by=.2),等同於seq(-5, 5, by=.2)
along=vector只能單獨使用,產生一個「1:length(vector)」序列。類似的函數是rep(),這個函數可以用多種複雜的方法來複製一個對象。最簡單的形式是s5 <- rep(x, times=5)

> 1:20 [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20> seq(2,10,by=3)[1] 2 5 8> seq(length=3,from=-3,by=5)[1] -3 2 7> rep(3,times=3)[1] 3 3 3

2.4 邏輯向量

TRUE, FALSE, 和NA(not available), 前兩個可以簡寫為T和F,但T/F並不是系統保留字,可以被用戶覆蓋,所以最好還是不要簡寫。
邏輯向量是由條件給出的,如下列語句令temp成為一個與x長度相同,相應位置根據是否與條件相符而由TRUE或FALSE組成的向量:

> 109<100[1] FALSE

邏輯操作符包括<, <=, >, >=,完全相等==和不等於!=,與或非分別為&, |, !。
在普通運算中,FALSE當做0而TRUE當做1。

2.5 缺失值

NA(not available): 一般來講一個NA的任何操作都將返回NA。
is.na(x)返回一個與x等長的邏輯向量,並且由相應位置的元素是否是NA來決定這個邏輯向量相應位置的元素是TRUE還是FALSE。
x==NA是一個與x具有相同長度而其所有元素都是NA的向量。
NaN(Not a Number): 由數值運算產生,如0/0, Inf-Inf.
is.na(x)對於NA和NaN值都返回TRUE,
is.nan(x)只對NaN值返回TRUE。

2.6 字符向量

字符串在輸入時可以使用單引號(』)或雙引號("); 在列印時用雙引號(有時不用引號)。
R使用與C語言風格基本相同的轉義符, 所以輸入\列印的也是\, 輸入" 列印引號", \n: 換行, \t: tab, \b: 回格。
字符向量可以通過函數c()連接;
paste()可以接受任意個參數,並從它們中逐個取出字符並連成字符串,形成的字符串的個數與參數中最長字符串的長度相同。如果參數中包含數字的話,數字將被強制轉化為字符串。在默認情況下,參數中的各字符串是被一個空格分隔的,不過通過參數sep=string 用戶可以把它更改為其他字符串,包括空字符串。例如:
labs <- paste(c(「X」,「Y」), 1:10, sep="") 使變量labs成為字符變量c(「X1」, 「Y2」, 「X3」, 「Y4」, 「X5」, 「Y6」, 「X7」, 「Y8」, 「X9」, 「Y10」)

> paste(c("X","Y",'Z'), 1:10, sep="_") [1] "X_1" "Y_2" "Z_3" "X_4" "Y_5" "Z_6" "X_7" "Y_8" "Z_9" "X_10"

2.7 index vector—數據集子集的選擇與修改

任何結果為一個向量的表達式都可以通過追加索引向量(index vector)來選擇其中的子集。
1 邏輯的向量。
y <- x[!is.na(x)] 表示將向量x中的非NA元素賦給y;
(x+1)[(!is.na(x)) & x>0] -> z 表示創建一個對象z,其中的元素由向量x+1中與x中的非缺失值和正數對應的向量組成。
2. 正整數的向量
x[6] 是x的第六個元素
x[1:10] 選取了x的前10個元素(假設x的長度不小於10)。
c(「x」,「y」)[rep(c(1,2,2,1), times=4)] 產生了一個字符向量,長度為16,由"x", 「y」, 「y」, "x"重複4次而組成。

> c("x","y")[rep(c(1,2,2,1), times=4)] [1] "x" "y" "y" "x" "x" "y" "y" "x" "x" "y" "y" "x" "x" "y" "y" "x"

  1. 負整數的向量
    y <- x[-(1:5)] 表示向量y取向量x前5個元素以外的元素。
  2. 字符串的向量
    只存在於擁有names屬性並由它來區分向量中元素的向量。這種情況下一個由名稱組成的子向量起到了和正整數的索引向量相同的效果。

> fruit <- c(5, 10, 1, 20)> fruit[1] 5 10 1 20> names(fruit) <- c("orange", "banana", "apple", "peach")> fruitorange banana apple peach 5 10 1 20 > lunch <- fruit[c("apple","orange")]> lunch apple orange 1 5

子集的修改
x[is.na(x)] <- 0 表示將向量x中所以NA元素用0來代替
y[y < 0] <- -y[y < 0] 表示將向量(-y)中 與向量y的負元素對應位置的元素 賦值給 向量y中 與向量y負元素對應的元素。作用相當於:
y <- abs(y)

三 對象,模式和屬性

3.1 固有屬性:模式和長度

對象是R所進行操作的實體,對象可以是向量、列表等,詳見1.6.
對象的模式包括numeri,ccomplex,character,logical,list,function,expression等。可以用mode(object)查看。
對象的長度是對象的另一固有屬性。可以用length(object)查看。
attribute(object)可以查看更深入的屬性。

模式的轉換
在允許的情況下(大多數情況都是允許的),R可以完成各種模式的轉換。例如:d<-as.character(z),將數值向量z<-(0:9)轉化為字符向量c(「0」, 「1」, 「2」, …, 「9」)。as.integer(d)將d轉化為數值向量。
R中很多形式為as.something()的函數,可以完成從一個模式向另一個模式的轉化,或者是令對象取得它當前模式不具有的某些屬性。

3.2 改變對象的長度

e <- numeric() 產生一個numeric型的空向量e。character()等類似。此時長度為對象0。
此時新添加一個元素會使e的長度自動調整。
e[3] <- 17 令e為一個長度為3的向量(此時,該向量的前兩個元素都是NA)
縮短(截斷)一個對象的長度,只需要一個賦值命令。因此,若alpha是一個長度為10的對象,下面的命令
alpha <- alpha[2 * 1:5]

3.3 屬性的獲取和設置

函數attributes(object)將給出當前對象所具有的所有非基本屬性(長度和模式屬於基本屬性)的一個列表。
函數attr(object,name)可以被用來選取一個指定的屬性。除了為某些特殊的目的創建新屬性這樣特殊的環境下,這些函數很少被用到。
當函數attr()用在賦值語句左側時,既可以是將對象與一種新的屬性關聯,也可以是對原有屬性的更改。例如

attr(z,「dim」) <- c(10,10) 另R將z作為一個10X10的矩陣看待。

3.4 對象的類別

對象的一個特別屬性,類別,被用來指定對象在R編程中的風格。比如:如果對象類別"data.frame"則會以特定方式處理。
unclass()可以去除對象的類別。
summary()可以查看對象的基本信息(min, max, mean, etc.)

四 有序因子和無序因子

因子是一種向量對象,它給自己的組件指定了一個離散的分類(分組),它的組件由其他等長的向量組成。R提供了有序因子和無序因子。
通俗點說,因子就是將對象的值分成不同的組(levels)。
用函數factor()創建一個因子,levels按序排列(字母序或數值序)。

例如province<-c(「四川」,「湖南」,「江蘇」,「四川」,「四川」,「四川」,「湖南」,「江蘇」,「湖南」,「江蘇」),為province創建因子:

pf<-factor(province) 創建province的因子pf
pf 列印出來
[1] 四川 湖南 江蘇 四川 四川 四川 湖南 江蘇 湖南 江蘇
Levels: 湖南 江蘇 四川
函數levels()可以用來觀察因子中有多少不同的levels。

假如我們擁有這些省份考生的分數:

score<-c(95,86,84,92,84,79,86,99,85,90)
函數tappley()可以用來計算各省的平均分數,函數tapply()的作用是對它第一個參數的組件中所包含的每個組應用一個參數三指定的函數。
smeans<-tapply(score,pf,mean)
smeans
湖南 江蘇 四川
85.66667 91.00000 87.50000
再例如,下面命令會給出各組的length
tapply(score,pf,length)
湖南 江蘇 四川
3 3 4

函數ordered()可以創建有序因子

ordered(province)
[1] 四川 湖南 江蘇 四川 四川 四川 湖南 江蘇 湖南 江蘇
Levels: 湖南 < 江蘇 < 四川

五 數組和矩陣

5.1 數組

數組可以看成一個由遞增下標表示的數據項的集合,例如數值。
數組的生成
如果一個向量需要在R中以數組的方式被處理,則必須含有一個維數向量作為它的dim屬性。
維度向量由dim()指定,例如,z是一個由1500個元素組成的向量。下面的賦值語句

dim(z) <- c(3,5,100) 使它具有dim屬性,並且將被當作一個3X5X100的數組進行處理。 c(3,5,100) 就是他的維度向量。
還可以用到像matrix()和array()這樣的函數來賦值。比如
array(1:20, dim=c(4,5))
matrix(1:24, 3,4)
數據向量中的值被賦給數組中的值時,將遵循與FORTRAN相同的原則"主列順序",即第一個下標變化的最快,最後的下標變化最慢。
數組的運算
數組可以在算數表達式中使用,結果也是一個數組,這個數組由數據向量逐個元素的運算後組成,通常參與運算的對象應當具有相同的dim屬性。

5.2 數組的索引和數組的子塊

數組中的單個元素可以通過下標來指定,下標由逗號分隔,寫在括號內。
我們可以通過在下標的位置給出一個索引向量來指定一個數組的子塊,不過如果在任何一個索引位置上給出空的索引向量,則相當於選取了這個下標的全部範圍。
如a[2,],a[,3,]等

5.3 索引數組

除了索引向量,還可以使用索引數組來指定數組的某些元素。
例如:有4X5的數組a,若要得到a中的a[1,3], a[2,2] 和a[3,1]這三個元素,可以生成索引向量i,然後用a[i]得到它們。

a <- array(1:20,dim=c(4,5)) # Generate a 4 by 5 array.
i <- array(c(1:3,3:1),dim=c(3,2))
i
[,1] [,2]
[1,] 1 3
[2,] 2 2
[3,] 3 1
a[i]
[1] 9 6 3
a[i] <- 0 # 將這三個元素用0替換。

5.4 向量,數組的混合運算

表達式從左到右被掃描;
參與運算的任意對象如果大小不足,都將被重複使用直到與其他參與運算的對象等長;
當較短的向量和數組在運算中相遇時,所有的數組必須具有相同的dim屬性,否則返回一個錯誤;
如果有任意參與運算的向量比參與運算的矩陣或數組長,將會產生錯誤;
如果數組結構正常聲稱,並且沒有錯誤或者強制轉換被應用於向量上,那麼得到的結果與參與運算的數組具有相同的dim屬性。

5.5 矩陣的運算

構建分區矩陣:cbind()和rbind(),cbind()按照水平方向,或者說按列的方式將矩陣連接到一起。rbind()按照垂直的方向,或者說按行的方式將矩陣連接到一起。

外積:操作符是%o%:

ab <- a %o% b 或者
ab <- outer(a, b, 「*」)
其中的乘法操作可以由任意一個雙變量的函數替代。

廣義轉置:函數t(A),或aperm(A, c(2,1));

獲取行數/列數:nrow(A)和ncol(A)分別返回矩陣A的行數和列數。

矩陣乘法:操作符為%*%;

交叉乘積(cross product):crossprod(X,Y)等同於t(X) %*% y,crossprod(X)等價於crossprod(X, X);

diag(v):如果v是向量,diag(v)返回一個由v的元素為對角元素的對角矩陣。
如果v為矩陣,diag(v)返回一個由v主對角元素組成的向量。
如果v只是一個數值,那麼diag(v)是一個vXv的單位矩陣。

特徵值和特徵向量:eigen(Sm)。這個函數的結果是由名為values和vectors的兩部分組成的列表。如果只是需要特徵值:eigen(Sm)$values

最小二乘擬合即QR分解:lsfit(), qr()。

強制轉換為向量:as.vector(),或者直接c().

解線性方程和求矩陣的逆,奇異值分解與行列式見<R語言筆記>;

六 列表和數據幀

6.1 列表

列表是由稱作組件的有序對象集合構成的對象。組件的模式或類型不一定相同。
形如Lst <- list(name_1=object_1, . . ., name_m=object_m)的賦值將創建一個包含m個組件的列表,並根據參數中指定的名稱為其命名。(其名稱可以自由選取)。如果它們的名稱被省略,組件將只是被編號。例如:

Lst <- list(name=「Fred」, wife=「Mary」, no.children=3,child.ages=c(4,7,9))

所使用的組件是被複製到新的列表中的,對原始對象沒有影響。
組件總是被編號的,並且可以通過編號指定。
Lst[[1]] 即為"Fred",也可以用 LstnameLst[[&quot;name&quot;]]Lst[[4]]Lst[[4]][1]Lst[[1]]Lst[1][[...]]使[...]LstLstLstname,Lst[[&quot;name&quot;]]指定。如果Lst[[4]]是一個有下標的數組,Lst[[4]][1]就是它的第一項。區分Lst[[1]]和Lst[1],&#x27;[[...]]&#x27;是選擇單個元素時使用的操作符,而&#x27;[...]&#x27;是一個一般的下標操作符。因此,前者代表列表Lst中的第一個對象;後者是列表Lst的子列表,僅包含列表的第一項。組件的名稱可以縮寫,可縮寫的程度是只要能令組件被唯一的識別就可以了。如:Lstna等價於LstnameLstname, Lstw等價於Lst$wife。

擴展列表
可以通過指定額外組件的方式。例如

Lst[5] <- list(matrix=Mat)

連接列表
當連接函數c()的參數為列表時,其結果也是一個模式為列表的對象。由參數中的列表作為組件依次連接而成。

list.ABC <- c(list.A, list.B, list.C)

6.2 數據幀

數據幀是類別為"data.frame"的列表;
數據幀會被當作各列具有不同模式和屬性的矩陣。
數據幀按照矩陣的方式顯示,選取的行或列也按照矩陣的方式來索引。

創建數據幀

直接創建:那些滿足對數據幀的列(組件)限制的對象可以通過函數data.frame來構建成為一個數據幀

t <- data.frame(home=statef, loot=income, shot=incomef)
強制轉換:如果一個列表的組件與數據幀的限制一致,這個列表就可以通過函數as.data.frame()強制轉化為一個數據幀。
外部文件:創建數據幀最簡單的方法應當是使用read.table()函數從外部文件中讀取整個數據幀。

數據幀和列表的限制

1 組件必須是向量(數值型,字符形,邏輯型),因子,數值矩陣,列表,或其他數據幀;
2 矩陣,列表,數據幀向新數據幀提供的變量數分別等於它們的列數,元素數和變量數;
3 數值向量,邏輯值和因子在數據幀中保持不變,字符向量將被強制轉化為因子,其水平是字符向量中所出現的值;
4 數據幀中作為變量的向量結構必須具有相同的長度,而矩陣結構應當具有相同的行大小。

掛接和卸載數據幀

當覺得使用』(t&#x27;引用數據幀元素(如&#x27;thome』)麻煩時,可以進行數據幀掛接

attach(t) 這樣可以直接引用數據幀內的元素,而無需』(name)&#x27;,前提是數據幀外沒有同名的變量(如name)。掛接後若要對數據幀元素進行賦值操作,仍需用&#x27;』,否則視為賦值給數據幀外的元素。
賦值後必須要先卸載(detach)再重新掛接後,新值才可見。
detach(t)

attach()是具有一般性的函數,即它不僅能夠將目錄和數據幀掛接在搜索路徑上,還能掛接其他類別的對象。特別是模式為"list"的對象可以通過相同的方式掛接:

attach(any.old.list)
任何被掛接的對象都可以用detach來卸載,通過指定位置編號或者指定名稱這樣的方式.

搜索路徑
函數search()將顯示目前的搜索路徑,可以用來查看數據幀/列表的掛接狀態。
ls()(或objects())命令可以用來檢查搜索路徑任意位置上的內容。如:ls(), ls(2), ls(t)
R可以在搜索路徑中包含至多20個項目,列表和數據幀只能在位置2或更靠後的位置上掛接。

數據幀使用慣例

1 將每個獨立的,適當定義的問題所包含的所有變量收入同一個數據幀中,並賦予合適的、易理解、易辨識的名稱;
2 處理問題時,當相應的數據幀掛接於位置2,同時在第1層工作目錄下存放操作的數值和臨時變量;
3 在結束一次工作之前,將你認為對將來有參考價值的變量通過$標記的形式添加到數據幀裡面,然後detach();
4 最後,將工作目錄下所有不需要的變量剔除,並且儘量將剩下多餘的臨時變量都清除乾淨。
這樣我們可以很簡單的在同一個目錄下處理多個問題,而且對每個問題都可以使用x,y,z這樣的變量名。

七 從文件中讀取數據

7.1 函數read.table()

該函數可以直接將文件中完整的數據幀讀入。此時文件要符合特定的格式:
1 第一行應當提供數據幀中每個變量的名稱;
2 每一行(除變量名稱行)應包含一個行標號和各變量的值。
3 若沒有表頭(變量名稱行),也沒有行標號,只有變量值,則默認變量名稱為"v1",「v2」…
4 若有表頭,但沒有行標號,則可以指定參數header=TRUE.

7.2 函數scan()

該函數從鍵盤或文件中讀取數據,並存入向量或列表中。

inp <- scan(file, what)
第一個參數是文件名,如「test.txt」,若為「」或空,則從鍵盤讀入數據;
第二個參數用於確定讀入數據的模式。 如:list("",0,0) 指定讀入到列表中,列表有三項,且列表第一項是字符型,第二三項是數值型。若為0,則指定讀入到一個數值向量中,若為「」則指定讀入到字符向量中。

7.3 內置數據集的讀取

R本身提供超過50個數據集,同時在功能包(包括標準功能包)中附帶更多的數據集。與S-Plus不同,這些數據即必須通過data函數載入。

data() #獲得基本系統提供的數據集列表,然後通過形如
data(infert) #來載入名為infert的數據集

從其他package中載入數據集
data(package=「nls」) #查看nls中數據集
data(Puromycin, package=「nls」) #讀取nls中Puromycin數據集。
用library()掛接package後,它的數據集也自動包含到搜索路徑中了。
library(nls) #載入package nls
data() #查看數據集
date(Puromycin) #載入Puromycin數據集
7.4 編輯數據

在使用一個數據幀或矩陣時,edit提供一個獨立的工作表式編輯環境。

xnew <- edit(xold) #對數據集xold進行編輯。並在完成時將改動後的對象賦值給xnew
xnew <- edit(data.frame()) #可以通過工作表界面錄入新數據。

fix()函數用於直接修改已有的對象,等價於 x<-edit(x).

八 概率分布

8.1 R是一個統計表集合(略讀)

R提供了一套完整的統計表集合。函數可以對累積分布函數P(X<=x),概率密度函數,分位函數(對給定的q,求滿足P(X<=x) > q的最小x)求值,並根據分布進行模擬。

對於所給的名稱,加前綴』d』代表密度(density),'p』代表CDF,'q』代表分位函數,'r』代表模擬(隨即散布)。這幾類函數的第一個參數是有規律的,形為dxxx的函數為x,pxxx的函數為q,qxxx的函數為p,rxxx的函數為n(rhyper和rwilcox是特例,他們的第一個參數為nn)。目前為止,非中心參數(non-centrality parameter)僅對CDF和少數幾個其他函數有效,細節請參考在線幫助。
所有pxxx和qxxx的函數都具有邏輯參數lower.tail和log.p,而所有的dxxx函數都有參數log,這個是我們可以直接通過

  • pxxx(t, …, lower.tail = FALSE, log.p = TRUE)
    獲取,比如說,累積失效函數(cumulative/integrated hazard function),H(t) =-log(1-F(t)),以及更精確的對數似然(通過dxxx(…, log = TRUE))。
    此外,對於來自正態分布,具有學生化樣本區間的分布還有ptukey和qtukey這樣的函數。下面是一些例子

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 檢測數據集的分布

函數summary和fivenum這兩個函數可以給出摘要,後者只給出數值;
函數stem可以將數值統計結果以類似直方圖的方式顯示出來;
函數hist()可以繪製直方圖;
函數density和line可以獲得更漂亮的密度圖;
功能包fun中的ecdf函數能繪製經驗累積分布函數;
還可以進行擬合正態分布,覆蓋擬合CDF;
還可以繪製Quantile-quantile (Q-Q)圖有助於我們更細緻的檢測其分布形態;

8.3 單樣本和兩樣本檢驗(略讀)

九 語句組、循環和條件操作

R是一種表達式語言,也就是說其命令類型只有函數或表達式,並由它們返回一個結果。
語句組由花括號『{ }』確定,此時結果是該組中最後一個能返回值的語句的結果。

條件語句

if (expr_1) expr_2 else expr_3
其中條件表達式expr1必須返回一個邏輯值,操作符&&和||經常被用於條件部分。
&和|與&&,||的區別在於,&和|按照逐個元素的方式進行計算,&&和||對向量的第一個元素進行運算,只有在必需的時候才對第二個參數求值。
if/else結構的向量版本是函數ifelse,其形式為ifelse (condition,a,b),產生函數結果的規則是:如果condition[i]為真,對應a[i]元素;反之對應的是b[i]元素。根據這個原則函數返回一個由a,b中相應元素組成的向量,向量長度與其最長的參數等長。

循環語句

for (name in expr_1) expr_2
其中name是循環變量,expr1是一個向量表達式(通常是1:20這樣的序列),而expr2經常是一個表達式語句組,expr2隨著name依次取expr1結果向量的值而被多次重複運行。

repeat(expr)

while(condition) expr

break語句可以用來中斷任何循環,可能是非正常的中斷。而且這是中止repeat循環的唯一方式。

next語句可以中止一個特定的循環,跳至下一個.

十 編寫自己的函數

10.1 函數的定義

name <- function(arg_1, arg_2, …) expression
expression是一個R表達式(通常是表達式語句組),並使用參數arg_i來計算出一個數值,表達式的值就是函數的返回值。
函數調用的形式通常都是name(expr1,expr2,…)

10.2 定義新的二元操作符

可以將函數定義為新的二元操作符:

「%!%」 <- function(X, y) { … }
正如矩陣乘法運算符,%*%,和矩陣外積運算符%o%

10.3 指定參數和默認值

如果被調用函數的參數按照"name = obj"的形式給出,那麼參數的次序可以是任意的。
而且,參數序列可以在開始依次序給出,而將指定名稱的參數置於後面。
因此,如果由一個函數fun1被定義為

fun1 <- function(data, data.frame, graph, limit) {
[function body omitted]
}
那麼函數可以有多種等價的使用方法,例如
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)
默認值 :在很多情況下,參數都會被賦予一個普遍適用的默認值。
fun1 <- function(data, data.frame, graph=TRUE, limit=20) { … }
則函數可以這樣被調用
ans <- fun1(d, df)
此時與上面三種情況等價,也可以這樣調用
ans <- fun1(d, df, limit=10)
此時改變了一個默認值。
NOTE:參數可以是任意表達式,甚至可以是包含其他參數的表達式;

10.4 額外參數「…」

當需要將一個函數的參數傳遞給另一個函數時,可以通過包含一個額外的參數"…「實現。
fun1 <- function(data, data.frame, graph=TRUE, limit=20, …) {
[omitted statements]
if (graph)
par(pch=」*", …)
[more omissions]
}

10.5 全局變量和局部變量

函數內的賦值都是局部變量,退出函數就丟失了。
如果要在函數內進行永久賦值(定義全局變量),需要用到「超賦值」操作符, <<-或者函數assign()。

10.6 一些高級示例

區組設計的效率因子 (E±ciency factors)
刪除列印數組中的所有名稱
遞歸的數值積分

10.7 範疇(Scope)

函數主體內出現的標識(symbol)可以被分為3類;正式參數、局部變量和自由變量。
正式參數就是出現在函數參數列表中的參數,他們的值由實際的函數參數與正式參數的綁定(binding)過程決定。
局部變量是在參數主體中,由表達式求值過程決定的變量。
自由變量為既不是正式參數又不是局部變量的變量。賦值之後自由變量成為局部變量。

在R中,自由變量的值由函數被創建的環境中與其同名的第一個變量值決定(我理解為最近的同名變量),這種方式被稱為詞彙式範疇(lexical scope)。
而在S中,該值由同名的全局變量決定。
例如下面的函數cube,在R中cube(2)=8,在S中報錯為sq()找不到n。
cube <- function(n) {
sq <- function() nn
n
sq()
}

一個銀行帳戶的例子,詳見《R語言筆記》。

10.8 定製環境

詳見《R語言筆記》。

10.9 類別,通用函數和對象定位

一個對象的類別(class)決定了他會如何被通用函數(generic function)處理。
如果參數本身沒有任何類別屬性,或者其類別在特定問題中並不滿足通用函數的要求,通常會有一個默認的動作被執行。
類別機制使用戶可以為特定的目的設計和編寫通用函數。
使用> methods(class=「data.frame」)可以查看數據幀的通用函數。
使用> methods(plot)可以查看plot函數能處理的類別。

十一 R的統計模型

待閱。

十二 圖形過程

在Windows下用window()命令可以打開圖形窗口。

12.1 高級繪圖命令

高級繪圖函數,由函數參數提供數據生成一幅完整的圖形。其中適當的坐標軸,標籤和標題都自動生成了(除非你另外指定了)。高級繪圖命令每次都生成一幅新的圖形,清除當前的圖形(如果需要的話)。

1 plot()函數

這是一個通用函數:生成圖形的類型取決於第一個參數的類型或類別(class)。
plot(x,y) plot(xy):
如果x,y是向量,plot(x,y)生成一幅y對x的散點圖。用包含兩個元素x,y的一個列表或一個兩列的矩陣作為一個參數(第二種形式那樣的)也能達成相同的效果。
plot(x):
如果x是一個時間序列,這個命令生成一個時間序列圖,如果x是一個數值型向量,則生成一個向量值對它們向量索引的土,而如果x是一個復向量,則生成一個向量中元素的虛部對實部的圖。
plot(f) plot(f,y):
f是一個因子對象,y是一個數值型向量。第一種形式生成一個f的條形圖;第二種形式生成y對應於f各個水平的箱線圖。
plot(df) plot( expr) plot(y expr):
df是一個數據幀,y是任意對象,expr是由對象名稱組成的列表,分隔符』+』(例如,a + b + c)。前兩種形式生成分布式的圖形,第一種是數據幀中的變量,第二種是一系列被命名的對象。第三種形式生成y對expr中每個對象的圖。

2 顯示多元數據

如果X是一個數值矩陣或數據幀,下面的命令

pairs(X)
生成一個配對的散點圖矩陣,矩陣由X中的每列的列變量對其他各列列變量的散點圖組成,得到的矩陣中每個散點圖行、列長度都是固定的。

當問題涉及到三、四個變量時,使用coplot更好些。如果a和b是數值向量,c是數值向量或因子對象(全都是相同長度的),下面的命令

coplot(a ~ b | c)
對應c的某些給定值生成數個a對b的散點圖。當c是一個因子時,這個命令也就是對c的每個水平生成a對b的散點圖。當c是數值向量的時候,這個數值向量被分為一系列的條件區間(conditioning intervals),對應c的每個區間生成一個a對b的散點圖。區間的數量和位置可以通過coplot()的參數given.values來控制,函數co.intervals()也可以用來選擇區間。我們也可以使用兩個給定變量通過命令
coplot(a ~ b | c+d)
對c和d的每個聯合條件區間生成a對b的散點圖。

函數coplot()和pairs()都可以使用參數panel=,這個參數可以用來定製我們得到的圖形類型。默認的是points()函數,生成一個散點圖,不過通過在參數panel=中提供某些其它的低級圖形函數,我們可以生成需要的各種圖形。一個很有用的函數例子是panel.smooth()。

3 顯示圖形

qqnorm(x) qqline(x) qqplot(x,y)
分布比較圖。第一種形式生成向量x對期望正態分數(一個正態記分圖),第二個在上面的圖上添加一條穿過分布分位點和數據分位點的直線。第三個命令生成x的分位點對y分位點圖,用於分別比較它們的分布。

hist(x) hist(x,nclass=n) hist(x,breaks=b, . . . )
生成數值變量x的直方圖。通常會自動選定一個合理的類別數,不過可以通過nclass=參數來指定一個推薦值。或者通過參數breaks=來指定分界點。如果給定了probability=TRUE參數,那麼條形圖代表相對頻數而不是累計數。

dotchart(x, . . . )
創建一個x中數據的點圖(dotchart)。點圖中y軸給出x中數據的標籤,x軸給出它們的值。它允許對落入某一特定區間的所有數據項方便的進行可視化選擇。

image(x,y,z, . . . ) contour(x,y,z, . . . ) persp(x,y,z, . . . )
生成三個變量的圖。函數image是用不同的顏色繪製一些矩形方格來展示z的值,函數contour通過繪製等高線來展示z的值,函數persp繪製一個3D面。

4 參數配置

add=TRUE 強制函數按照低級圖形函數的方式操作,將圖形置於當前圖形上(僅對某些函數有效)。
axes=FALSE 暫時禁止坐標軸的生成|以便使用axis()函數添加你自己定製的坐標軸。默認情況是axes=TRUE,即包含坐標軸。
log=「x」 log=「y」 log=「xy」 令x,y或者兩者全都對數化。這個參數對許多函數都有效,不過不是全部。
type= 參數type=控制所生成圖形的類型:
type=「p」 繪製單獨的點(默認值)
type=「l」 繪製線
type=「b」 繪製由線連接的點(both)
type=「o」 將點繪在線上
type=「h」 繪製從點到零軸的垂線(high-density)
type=「s」 階梯式圖。第一種形式中,點由垂線的頂部定義;第二種形式裡用底部定義。
type=「n」 不繪製。不過坐標軸是繪出的(默認情況)而且要根據數據繪出坐標系統。用來給後續的低級圖形函數創建圖形作基礎。
xlab=string ylab=string x軸或y軸的標籤。使用這些參數來改變默認的標籤,通常的默認值是調用高級繪圖函數時所使用對象的名稱。
main=string 圖表標題,位於圖形的頂部,大字體顯示。
sub=string 子標題,位於x軸下面,用較小的字體顯示。

12.2 低級繪圖命令

有些時候高級繪圖函數並不能很精確的生成我們想要的圖形。這種情況下,我們可以通過低級繪圖命令在當前圖形上添加信息(例如,點、線或文本)。

points(x,y) lines(x,y)
在當前圖形上添加點或線。函數plot()的參數type=也可以用於這些函數(默認的是"p"代表points()和"l"代表lines())。

text(x,y,labels, . . . )
給定點坐標x,y,在該點添加文本。通常labels是一個整數或字符向量,其中labels[i]出現在點(x[i],y[i])。默認值是1:length(x)。
Note: 這個函數通常用於這樣的序列中

plot(x, y, type=「n」); text(x, y, names)
圖形參數type="n"阻止了點的生成,但是建立了坐標軸,由函數text()提供字符向量names所指定的特定字符。

abline(a, b) abline(h=y) abline(v=x) abline(lm.obj)
在當前圖上添加一條斜率為b,截距為a的直線。h=y在圖形指定的高度上繪製一條貫穿圖形的水平線,同樣的,v=x在x軸的指定位置繪製一條貫穿的垂線。而lm.obj是一個包含coefficients組件的列表,該組件的長度為2,分別當作截距和斜率。

polygon(x, y, . . . )
繪製一個多邊形,其頂點由(x,y)指定。同時還(可選的)可以加上陰影線,如果圖形設備允許的話還可以將多邊形填充。

legend(x, y, legend, . . . )
這當前圖形的指定位置添加圖例。繪製的字符,線條類型,顏色等等由字符向量legend指定。除此之外至少還要給出一個參數v,與繪圖單元的相應值,分別有:
legend( , fill=v)填充方框的顏色
legend( , col=v)繪製點線的顏色
legend( , lty=v)線條類型
legend( , lwd=v)線條寬度
legend( , pch=v)繪製字符(字符向量)

title(main,sub)
在當前圖形的頂部用大字題添加一個標題main,在底部用較小的字體添加子標題sub。

axis(side, . . . )
在當前圖形的指定邊上添加坐標,在哪個邊上由第一個參數指定(1到4,從底部按照順時針順序)。其他參數控制坐標的位置|在圖形內或圖形外,以及標記的位置和標籤。適合在調用參數為axes=FALSE的函數plot()後添加定製的坐標軸。

低級繪圖函數通常都需要一些位置信息(例如,x,y坐標)來決定在哪裡添加新的元素。坐標以用戶坐標(user coordinates)的形式給出,這個坐標系是根據所提供的數據由之前的高級繪圖語句定義的。需要x,y參數的地方還可以選用一個單獨的參數,即一個由名為x,y的元素組成的列表。相似的,一個兩列的矩陣也可以。像locator()(後面會提到)這樣的函數也可以按照這種方式交互的指定圖形中的位置。

添加數學注釋
某些情況下需要在圖形中加入數學符號或公式。在R中可以通過在text, mtext,axis或title中指定一個表達式來實現。例如,下面的代碼繪製了二項概率函數的公式:

text(x, y, expression(paste(bgroup("(", atop(n, x), 「)」),p^x, q^{n-x})))
更多的信息,包括其特性的一個完整列表可以在R中通過下面的命令得到:
help(plotmath)
example(plotmath)

添加Hershey矢量字體

help(Hershey)
example(Hershey)

12.3 圖形的交互

R提供了函數,使用戶可以通過滑鼠從圖形中釋放信息或添加信息。

locator(n,type)
等待用戶使用滑鼠左鍵在當前圖形上選擇位置。直到n(默認是512)個點都選完或者點擊了滑鼠另一個鍵(Unix,Windows),在Mac下用滑鼠點擊圖形窗口外的部分也可以結束。參數type的效果和在高級繪圖函數中使用時是一樣的,即在選擇的點繪製指定的圖形。默認情況是不繪製圖形。函數locator()將所選點的坐標返回到一個列表中,列表包含x,y兩個組件。
通常locator()在調用的時候並不帶參數。這個功能在為圖例或標籤這樣的圖形元素選擇位置時比較有用,尤其是這些位置不好通過計算得到的時候。舉個例子,如果要在一個野點附近添加一些信息,可以使用下面的命令

text(locator(1), 「Outlier」, adj=0)

identify(x, y, labels)
允許用戶在x,y(使用滑鼠左鍵)定義的點附近繪製相應的labels的組件(如果沒有給出labels就給出該點的序號),突顯該點。當滑鼠的另一個鍵被點擊時(Unix,Windows)返回被選點的序號,在Mac下通過點擊圖形窗口外來實現這個效果。
有時我們更想確定圖形中的點,而非它們的位置。例如,我們可能希望從圖示中選出某些感興趣的觀測點,然後進行某些操作。通過兩個數值向量x,y給定一系列坐標(x; y),我們可以使用identify()函數:

plot(x,y) > identify(x,y)
函數identify()本身不繪圖,但是允許用戶移動滑鼠,在某點附近點擊左鍵。離滑鼠指針最近的點將被突顯,並標出其序號(也就是它在向量x/y中的位置)。或者使用identify()的labels參數,把某些信息(例如案例名稱)作為突顯的標誌;或者通過plot=FALSE參數取消所有突顯標誌。當選點的過程結束後,identify()返回所選點的序號;用戶可以使用這些序號從x和y中釋放所選的點。

12.4 使用圖形參數

通過圖形參數可以定製圖形顯示的幾乎所有方面。R包含大量的圖形參數,可以控制的包括線條類型,顏色,圖標排列,文本對齊等等。

1 持續性變更 (Permanent changes): par()函數

通過par()函數設定圖形參數的值會持續性的更改參數的值,也就是說這之後(在當前設備上)所有對圖形函數的調用都受到新值的影響。
函數par()用於存取和修改當前圖形設備的圖形參數列表。
par()不帶任何參數,返回當前設備所有圖形參數和它們的值的列表。
par(c(「col」,「lty」))
參數為一個字符向量,僅返回參數中指定的圖形參數(也是作為一個列表)。
par(col=4, lty=2)
帶指定參數(或一個列表型參數),設定指定圖形參數的值,並將參數的原始值作為一個列表返回。
所以如果想設定參數繪製一些圖形後再恢復成原來的設定,可以這麼做:

oldpar <- par(col=4, lty=2)
. . . plotting commands . . .
par(oldpar)

2 臨時性變更:圖形函數的參數

圖形參數也可以作為(幾乎)所有圖形函數的命名參數。這種方式的效果和用於par()函數的效果是一樣的,只不過這種改變只在函數調用的區間內有效。比如:

plot(x, y, pch="+")
生成一個以加號作為繪圖符號的散點圖,而不改變後續圖形的默認的繪圖符號。

3 圖形參數列表

A 圖形元素
R圖表由點、線、文本和多邊形(填充區)組成。下面的圖形參數控制了圖形元素的繪製:
pch="+" 用來繪點的字符。這個默認值隨不同的圖形驅動是不同的,不過通常都是』±』。除非使用"."作為繪圖字符,否則繪製的點都會比適當的位置高一點或者低一點,而不是恰好在指定位置。
pch=4當給定一個0到18的整數時,會生成一個特殊的繪圖符號。通過下面的命令可以看這些符號都有什麼。

legend(locator(1), as.character(0:18), pch=0:18)
lty=2 線條類型。並不是所有圖形設備都支持多種線條類型(在那些支持的設
備上也不全一樣),不過線條類型1始終是實線,2及以上的是點、劃線或者它們的組合。
lwd=2 線條寬度。所需的線條寬度,是"標準"線條寬度的倍數。對line()等函數繪製的線條和坐標軸都有效果。
col=2 點、線、文本、填充區和圖像使用的顏色。每種圖形元素都有其可用的顏色列表,這個參數的值就是顏色在列表中的序號。顯然,這個參數值對有限的一類設備有效。
font=2 指定文本所使用字體的一個整數。如果可能的話,設備驅動會把1對應普通文本,2對應粗體,3對應斜體,4對應粗斜體。
font.axis font.lab font.main font.sub 這幾個參數分別指定坐標軸注釋,x,y軸的標籤,主、副標題所用的字體。
adj=-0.1 文本對齊和繪圖位置有關。0代表左對齊,1代表右對齊,0.5代表水平的中間位置。當前的值使會圖位置到左端距離的比例,所以-0.1在文本和繪圖位置之間留10%的空白。
cex=1.5 字符縮放。這個值是所需文本字符(包括繪圖字符)的大小,與默認文本大小相關。

B 坐標軸和標記
很多R的高級圖形都有坐標軸,你可以使用低級圖形函數axis()自己創建坐標軸。坐標軸包含三個主要組件:軸線axis line(線條類型由參數lty控制),標記tick mark(沿著軸線劃分單元),標號tick label(用來標出這些單元)。這些組件可以用下面這些參數定製。
lab=c(5,7,12)前兩個數字分別是x和y軸上所要劃分的區間數。第三個數字是坐標軸標籤的長度,用字符數來衡量(包括小數點)。參數的值如果選得太小可能導致所有標號都聚在一起。
las=1 坐標軸標籤的方向。0代表總是和坐標軸平行,1代表總是水平的,2代表總是垂直於坐標軸。
mgp=c(3,1,0)坐標軸組件的位置。第一個組件是坐標軸標籤到坐標軸的距離,單位是文本行(text lines)。第二個組件是到標號的距離,最後一個是軸的巍直到軸線的距離(一般都是0)。正數代表繪圖區域外,負數代表區域內。
tck=0.01 標號的長度,繪圖區域大小的一個分數作單位。當tck比較小時(小於0.5),就強制x和y軸上的標記為相同大小。tck=1就是生成網格線。取負值時標記畫向繪圖區域外。內部標記可以使用tck=0.01和mgp=c(1,-1.5,0)。
xaxs=「s」 yaxs=「d」 分別是x、y軸的類型。如果是s(standard)或e(extended)類型,那最大和最小的標記都始終在數據區域之外。如果有某個點離邊界非常近,那麼擴展型(extended)的軸會稍稍擴展一下。這種類型的軸有時會在邊界附近留出大片空白。而i(internal)或r(默認值)類型的軸,標記始終在數據區域內,不過r類型會在邊界留出少量空白。
如果這個參數設為d,就鎖定當前軸,對之後繪製的所有圖形都用這個軸(直到參數被重新設定為其他的那幾個值)。這個參數適用於生成一系列固定尺度的圖。

C 圖邊緣(Figure margins)
在R中一個單獨圖形,圖(figure),包含一個繪圖區(plot region),以及環繞著這個區域的邊緣(其中可能含有坐標軸標籤、標題等等),(通常)這兩部分以軸為邊界。
一個典型的圖是

控制圖的樣式的圖形參數包括:
mai=c(1,0.5,0.5,0)分別是底部,左側,頂部,右側的寬度,單位是英寸。
mar=c(4,2,2,1)與mai相似,只是單位是文本行(text lines)。
由於更改一個就會改變另一個的值,所以在這個意義上,mai和mar是等價的。這個參數的默認值通常都太大了;右側邊緣很少用到,如果沒標題,頂部邊緣也不需要,左側和底部的邊緣應當足夠大,以容納坐標軸和標號。此外,默認值並沒有考慮到設備表面的大小:比如,使用postscript()驅動,height=4參數時,除非用mar,mai另外設定,否則圖的邊緣就要佔上大約50%。使用多圖環境時(後面會提到)。邊緣會減少一半,不過這在多圖共用一頁的時候可能還不夠。

D 多圖環境
R允許在一頁上創建一個n£m的圖的陣列。每個圖由自己的邊緣,圖的陣列還有一個可選的外部邊緣,如下圖所示。

與多圖環境相關的圖形參數有:
mfcol=c(3, 2) mfrow=c(2, 4)
設定多圖陣列的大小。第一個值是行數,第二個值是列數。這兩個參數唯一的區別是mfcol把圖按列排入,mfrow把圖按行排入。上圖所示的版式可用mfrow=c(3,2)創建;上圖顯示的是繪製四幅圖後的情況。
mfg=c(2, 2, 3, 2)
當前圖在多圖環境下的位置。前兩個數字是當前圖的行、列數;後兩個是其在多圖陣列中的行列數。這個參數用來在多圖陣列中跳轉。你甚至可以在後兩個數中使用和真值(true value)不同的值,在同一頁上得到大小不同的圖。
fig=c(4, 9, 1, 4)/10
當前圖在頁面的位置,取值分別是左下角到左邊界,右邊界,下、上邊界的距離與對應邊的百分比數。給出的例子是一個頁面右下角的圖。這個參數可以設定圖在頁面的絕對位置。
oma=c(2, 0, 3, 0) omi=(0, 0, 0.8, 0)
外部邊緣的大小。與mar和mai相似,第一個用文本行作單位,第二個以英寸作單位,從下方開始按照順時針順序指定。
外部邊緣對頁標題這類東西很有用。文本可以通過帶outer=TRUE參數的mtext()函數加入外部邊緣。默認情況下是沒有外部邊緣的因此必須通過oma或omi指定。
函數split.screen()和layout()可以對多個圖形作更複雜的排列。

12.6 設備驅動

R幾乎可以在任何一種類型的顯示器和列印設備上生成(不同質量的)圖形。不過,在這之前,需要告訴R要處理的是哪一種設備。這通過啟動一個設備驅動來完成。
設備驅動通過調用設備驅動函數來啟動。
某些常用的設備驅動有:
X11()[Unix] 使用X11視窗系統
windows()[Windows] 使用 Windows 視窗系統
postscript()在PostScript印表機上列印或者創建PostScript圖形文件
pictex()生成一個LATEX文件
當一個設備使用完之後,可以通過下面的命令終止設備驅動

dev.off()
這個命令可以確保設備已經結束;例如,在某些硬拷貝的設備中,這個命令可以保證每頁都已經完成,並且都被傳送到印表機了。

PostScript文檔
通過給postscript()函數帶上file參數,我們可以把圖形以PostScript格式存儲到文件中。如果沒有給出horizontal=FALSE參數,圖形是橫向的,你可以通過width和height參數控制圖形的大小(圖形會自動適應)。例如,命令

postscript(「file.ps」, horizontal=FALSE, height=5, pointsize=10)
為一個五英寸的圖生成一個包含PostScript代碼的文件,可以放在文當中。如果命令中的指定的文件名已經存在,將會被覆蓋。

多重圖形設備
每個對設備驅動的新調用都會打開一個新的圖形設備,在設備列表中加入新的一項。這個設備就成為當前設備,圖形輸出就傳送到這個設備。
dev.list() 返回所有活動中設備的序號和名稱。在列表位置1的設備始終是空設備(null device),這個設備不接收任何圖形命令。
dev.next() dev.prev() 分別返回當前設備的後一個和前一個設備的序號和名稱。
dev.set(which=k) 用來把當前設備更改為設備列表中位置k的那個。返回設備的序號和標籤。
dev.off(k) 終止圖形列表位置k的那個圖形設備。對於某些設備,比如postscript,這個命令會立刻列印文件或者正常結束文件,具體怎樣處理取決於設備是怎樣初始化的。
dev.copy(device,. . . ,which=k) dev.print(device,. . . ,which=k)
建立一個設備k的拷貝。其中device是一個設備函數,例如postscript,如果需要的話可以在』. . . '中指定其它的參數,dev.print效果相似,不過複製的設備會立刻關閉,所以列印硬拷貝這樣的終止操作也會被立即執行。
graphics.off() 終止列表中的所有圖形設備,空設備除外。


作者:jack237
來源:CSDN
原文:https://blog.csdn.net/jack237/article/details/8210598
版權聲明:本文為博主原創文章,轉載請附上博文連結!

相關焦點

  • r語言 做wald檢驗_r語言wald檢驗怎麼做 - CSDN
    用R語言遇到的一些問題。經常看到rcs()函數,比如擬合回歸時:f <- cph(S ~ rcs(age,4) + sex, x=T, y=T)。
  • r語言tseries - CSDN
    library(fGarch) #GARCH模型library(nlme) #調用其中的gls函數library(fArma) #進行擬合和檢驗二、【基本函數】數學函數abs,sqrt:絕對值,平方根 log, log10, log2 , exp:對數與指數函數 sin,cos,tan,asin,acos,atan,
  • R語言-stringr-字符串處理
    R包stringr處理字符相對簡單,尤其是我常用Power BI,但是對M語言不熟悉,不會處理字符數據,往往我就先利用R清洗字符數據列。本文記錄工作中常用的字符處理函數,部分案例照搬R for Data Science的字符部分。
  • R語言arma模型診斷_arma模型實現模型r語言 - CSDN
    library(fGarch)        #GARCH模型library(nlme)          #調用其中的gls函數library(fArma)        #進行擬合和檢驗【基本函數】數學函數
  • r語言的p值檢驗 - CSDN
    輸入1: rdata = matrix(rnorm(1000* 6, 0, 3), 6) rvar = apply(rdata, 2, var) mean(rvar)結果1: 醫學統計與R語言:一份簡單的數據整理分析醫學統計與R語言:利用金字塔圖比較多個指標醫學統計與R語言:點圖(dotplot)醫學統計與R語言:幕後高手出馬!醫學統計與R語言:Calibration plot with 置信區間醫學統計與R語言:還說自己不會畫Calibration plot!
  • 掌握R語言for循環一文就夠了(認真臉)
    R語言相信大家在利用R語言進行數據分析的時候可能會有大數據分析需求。R語言不考慮並行運算下的簡單批處理實現方式就是for循環。) #相關係數P=c("p") #P值for (r in 1:nrow(data)){ #在下面的{}內r的範圍從1到data的行數,即100for (t in r:nrow(data)){ #在下面的{}內t的範圍從1到data的行數,兩個for疊加的話,先固定第一個for r
  • R語言:Newton法、似然函數
    hello,大家好,上一篇分享了如何用R語言實現蒙特卡洛模擬,並用蒙特卡洛模擬計算了分布的均值和方差,今天給大家分享如何用R語言來進行矩估計和似然函數的求解。因為在求解矩估計和似然函數時,可能會遇到非線性方程組,所以先給大家介紹一下如何用Newton法來求解非線性方程組。
  • R語言 小wald檢驗_lm檢驗 wald檢驗 - CSDN
    用R語言遇到的一些問題。經常看到rcs()函數,比如擬合回歸時:f <- cph(S ~ rcs(age,4) + sex, x=T, y=T)。
  • r語言卡方檢驗和似然比檢驗_r語言似然比檢驗代碼 - CSDN
    本文對應《R語言實戰》第9章:方差分析;第10章:功效分析 ====================================================================方差分析:回歸分析是通過量化的預測變量來預測量化的響應變量,而解釋變量裡含有名義型或有序型因子變量時
  • r語言有什麼優劣勢及R語言的未來發展趨勢_R語言在現實中的應用
    r語言有什麼優劣勢分析 R語言擁有強大的軟體包生態系統與圖表優勢是專門為統計和數據分析開發的語言,各種功能和函數琳琅滿目,其中成熟穩定的一抓一把 3. 語言簡單易學。雖與C語言之類的程序設計語言已差別很大(比如語言結構相對鬆散,使用變量前不需明確正式定義變量類型等等),但仍保留了程序設計語言的基礎邏輯與自然的語言風格。我這樣說可能讓人聽得雲裡霧裡,但是如果你對SAS或者SPSS有一點點了解,就會明白我的意思了。。。 4. 小。。。
  • r語言一元回歸模型專題及常見問題 - CSDN
    它規定模型f函數只能是y=k*x+b的形式,即只使用一個變量x(故稱為一元)的線性形式來預測目標變量y。6.1.1引例利用某網站歷次促銷活動中促銷讓利費用和銷售金額的數據(單位是十萬元),將使用該數據集來說明線性回歸分析的應用。
  • 9 本優秀的 R 語言免費電子圖書
    R語言是主要用於統計分析、繪圖的語言和操作環境。 R本來是由來自紐西蘭奧克蘭大學的Ross Ihaka和Robert Gentleman 開發。
  • r語言白噪聲檢驗眼_r語言白噪聲檢驗 - CSDN
    最近還在考慮是否要做一個微信公眾號,因為用手機看csdn的博客效果不是很好。  當然,這些都是之後要考慮的。這一篇文章我們就先來講一下時間序列的知識。該性質用自相關係數來描述就是隨著延遲期數的增加,平穩序列的自相關係數會很快的衰減到0  特別,關於延遲的相關係數的計算公式如下    在mathematica裡使用的函數是CorrelationFunction[],具體代碼如下ListPlot[ CorrelationFunction
  • r語言 平穩性檢驗 - CSDN
    這一部分是時間序列預處理R語言的實現。目標是將課本和上課知識點整合。read.csv()milk <- ts(a$milk,start =c(1962,1) ,frequency = 12)plot(milk)acf(milk,lag.max=24,ylim=c(-1,1))b <- read.csv()temp <- ts(b$temp,start = 1949)plot(temp)acf(temp,ylim=c(-1,1))平穩性檢驗的R語言的實現
  • r語言 sigma - CSDN
    #分析:按題意,需檢驗#H0: μ ≤ 225 H1: μ > 225#此問題屬於單邊檢驗問題,可以使用R語言t.test#t.test(x,y=NULL,alternative=c(「two.sided」,「less」,「greater」),mu=0,paired=FALSE,var.equal=FALSE,conf.level=0.95
  • R語言從入門到精通:Day10-R語言統計入門代碼大全
    我們一波了  到目前為止,R語言的數據操作和基礎繪圖部分已經講解完畢,換句話說,大家應該已經能將數據導入R中,並運用各種函數處理數據使其成為可用的格式,然後將數據用各種基礎圖形展示。完成前面這些步驟之後,我們接下來要探索數據中變量的分布以及各組變量之間的關係。
  • R語言:t檢驗
    BioNews,專注於報導生命科學領域相關新聞,長按下方二維碼即可關注"BioNews"(id : iBioNews)1. t分布(不同自由度)了解r語言幾個函數:dt,pt,qt,rt分別與dnorm,rnorm,pnorm,qnorm和rnorm對應 > * dt() 的返回值是正態分布概率密度函數(density)> * pt()返回值是正態分布的分布函數(probability)> * 函數qt()的返回值是給定概率p後的下百分位數(quantitle)> * rt()的返回值是n個正態分布隨機數構成的向量
  • r 秩和檢驗 - CSDN
    可視化數據並在R中計算的Wilcoxon測試ř函數用於計算的秩檢驗為了執行兩個樣本的Wilcoxon檢驗,比較兩個獨立樣本(x&y)的均值,R函數wilcox.test()可以如下使用:wilcox.test(x, y, alternative = "two.sided")
  • r語言卡方檢驗算法_r語言符號檢驗算法 - CSDN
    解:按題意,需檢驗                     H0: μ ≤ 225     H1: μ >  225      此問題屬於單邊檢驗問題      可以使用R語言t.test
  • r語言檢驗序列相關 - CSDN
    模型識別3.1 自相關圖的繪製在R中繪製自相關圖使用函數acf( ):這個函數的命令格式為:acf(x, lag)# 繪製2014年7月至2017年5月北京市商品住宅施工面積累計值 的時序圖, 並添加輔助線來比較> w <- read.csv("E:/DATA/CHAP1/Beijing commodity +housing.csv", header