1.R语言入门操作
1.R語言入門操作
1.1、目的
1.2、使用
如果是虛擬機環境:首先打開終端:輸入R進入R環境
如果是windows環境:點擊對應的客戶端軟件即可
1.2.1 賦值操作
1.2.1.1 數值賦值
a <- 100 a結果為:[1] 100
或者
b = 100 b結果為:[1] 100
還可以
100 -> c c結果為:[1] 100
以上語句的作用是將100賦值給a變量,其中“<-”、“->”、“=”都是R中的賦值的符號。除此之外,在R中,還可以作用函數assign()來給變量賦值,例如:
(assign("x",100))結果為:[1] 100
其中,最外層的括號的作用是為了顯示變量x的值;命令中的雙引號必須在英文狀態下輸入;在R中,是區分大小寫的。
我們可以用函數ls()來查看當前工作空間中的變量:
ls()結果為:[1] “a” “b” “c” “x”
1.2.1.2 向量賦值
在R語言中,生成向量的方法很多,最簡單的方法就是使用連接函數c()來生成。例如:把數據 12.1 11.9 12.0 12.3 11.8 賦值給變量x,可以輸入命令:
x <- c(12.1,11.9,12.0,12.3,11.8) x[1] 12.1 11.9 12.0 12.3 11.8
函數c()不但可以連接數值,還可以連接已有的向量,例如,當輸入命令:
y <- c(x,1,x) y結果為: [1] 12.1 11.9 12.0 12.3 11.8 1.0 12.1 11.9 12.0 12.3 11.8
如果要生成有一定規律的向量,則要用到R中的相應函數。
(1)步長為1的等差數列構成的向量
用符號“:”可以產生步為1的等差數列,其使用格式為:a:b,表示起始值為a,步長為1,終止值為b的等差數列,若b不在首項為a步長1的數列里,則產生的數列的末項為小于b的最大值,比較以下命令:
(a <- 1:10)結果為: [1] 1 2 3 4 5 6 7 8 9 10
(b <- 1.1:10)結果為:[1] 1.1 2.1 3.1 4.1 5.1 6.1 7.1 8.1 9.1
(c <- 10:1)結果為: [1] 10 9 8 7 6 5 4 3 2 1
在這里,符號“:”的作用與matlab中的作用相同,但要注意的是,該符號并不能指定數列的步長,如果要產生指定步長的等差數列,則要用函數seq()。
(2)任意步長的等差數列構成的向量
如果要生成任意步長的等差數列,可以用函數seq(),其基本語法如下:
seq(from = 1, to = 1, by = ((to - from)/(length - 1)),length.out = NULL, along.with = NULL, ...)參數說明:
from: 數值,表示數列的起始值,默認值為1
to: 數值,表示數列的終止值,默認值為1
by: 數值,指定數列的步長
length.out: 數值,指定數列的長度
along.with: 向量,表示產生的數列與該向量具有相同的長度
注1.參數by,length.out,along.with這三個參數只能選一項
注2.當參數to指定的終止值不在以from為起始值,以by指定的步長的數列中的值時,所產生的數列終止值為不超過to的最大值。在R中輸入以下命令,觀察其結果。
seq(1,10)#默認的步長是1結果為: [1] 1 2 3 4 5 6 7 8 9 10
seq(10)#默認的起始值為1,步長為1結果為: [1] 1 2 3 4 5 6 7 8 9 10
seq(2,10,by = 2)結果為: [1] 2 4 6 8 10
seq(1,10,length.out = 5)#向量的維數指定為5結果為: [1] 1.00 3.25 5.50 7.75 10.00
seq(1,10,along.with = c(1,3,5))#向量的維數與向量(1,3,5)的維數相同結果為: [1] 1.0 5.5 10.0
(3)使用重復函數
重復函數rep()的作用是將變量或是向量復制若干次,函數的調用格式:
rep(x,...)x: 數值、向量或是數據對象,是要復制的對象
… 是可選的一些參數,包括
times: 表示x被復制的次數
length.out: 表示復制后輸出的向量長度
each: 表示x中每個分量被復制的次數
正整數構成的向量:長度與x一致,其分量表示x的對應分量被復制的次數
在R中輸入以下命令,觀察其效果。
x = 1:4 rep(x,times = 2)結果為:[1] 1 2 3 4 1 2 3 4
rep(x,length.out = 10)結果為: [1] 1 2 3 4 1 2 3 4 1 2
rep(x,each = 2)結果為:[1] 1 1 2 2 3 3 4 4
rep(x,c(1:4))結果為: [1] 1 2 2 3 3 3 4 4 4 4
對于已構建的向量x,如果想要查看向量x中的元素,可以輸入x[i],其中的索引i可以是數字,也可以是向量,輸入以下命令,觀察其效果。
x <-1:10 x[1]結果為:[1] 1
x[1:3]結果為:[1] 1 2 3
x[c(1,4,7)]結果為:[1] 1 4 7
注1.在R中引用向量時,用的是[],而matlab等編程語言中用的是(),不要混淆。
注2.在R 中向量的下標是從1開始的,而C等編程語言是從0開始的,不要混淆。
1.2.1.3 刪除和修改元素
如果要刪除向量x中的元素,可以輸入x[-i],其中索引i可以是數字,也可以是向量,輸入以下命令,觀察其效果。
x<-1:10 x[-3]結果為:[1] 1 2 4 5 6 7 8 9 10
x[-(1:4)]結果為:[1] 5 6 7 8 9 10
x[-c(3,6,9)]結果為:[1] 1 2 4 5 7 8 10
注意,以上操作并未真正從變量x中刪除掉相應的元素,要達到刪除的目的,可以把以上操作的結果賦值給其他變量。如果要修改向量中的某些元素,可以直接給相應的分量賦值,輸入以下命令,觀察其結果。
x[3] <- 18 x結果為: [1] 1 2 18 4 5 6 7 8 9 10
x[1:3]<-c(10,20,30) x結果為: [1] 10 20 30 4 5 6 7 8 9 10**
**
x[c(3,6,9)]<-c(12,24,36) x結果為: [1] 10 20 12 4 5 24 7 8 36 10
1.2.2 算術操作
R語言提供了方便的算術運算的操作,包括+、-、*、/等,這些與matlab的運算含義完全一樣,都可以對向量進行運算。下面是一些R中特有的運算:
(1)求余:%%
如:
9%%4結果為:[1] 1
(1:10)%%2結果為: [1] 1 0 1 0 1 0 1 0 1 0
(2)求商:%/%
如:
9%/%4結果為:[1] 2
(1:10)%/%2結果為: [1] 0 1 1 2 2 3 3 4 4 5
(3)乘方:^
如:
2^3結果為:[1] 8
(1:10)^3結果為: [1] 1 8 27 64 125 216 343 512 729 1000
(4)開方:sqrt()
如:
sqrt(9)結果為:[1] 3
sqrt(1:10)結果為: [1] 1.000000 1.414214 1.732051 2.000000 2.236068 2.449490 2.645751 2.828427
[9] 3.000000 3.162278
注:函數sqrt()只能是在實數范圍內開平方,如果輸入的參數是負數,則會輸出NaN(NaN是Not a Number 的縮寫,表示不確定),并提示警告信息。輸入以下命令,觀察其結果。
sqrt(-9)結果為:NaN
Warning message:
In sqrt(-9) : NaNs produced
(5)對數及以e為底的指數:log();log2();log10();exp();
①log()有兩個參數,一個為x,一個是base,即底數。如果要求以2為底數,16的對數,可以如下操作:
結果為:[1] 4
或者
log(x = 16,base = 2)結果為:[1] 4
log(x = c(2,4,8,16),base = 2)結果為:[1] 1 2 3 4
②log2()和log10()均只有一個參數,即x,他們分別是以2為底和以10為底取對數。
③exp()是計算以e為底的指數,只有一個參數x,其作用是計算e^x如:
exp(1)結果為:[1] 2.718282
exp(1:3)結果為:[1] 2.718282 7.389056 20.085537
在R語言中,可以完成各種初等函數的運算,如對數、指數、三角函數和反三角函數以及其他的運算,表1.1列出了R語言中常用的函數。
表1.1 R語言中的數學函數
| abs | 絕對值函數 |
| exp | 2.71828… |
| expm1 | 當x的絕對值比1小很多的時候,能更加正確的計算exp(x)-1 |
| log | 對數函數 |
| log10 | 對數(底為10)函數 |
| log2 | 對數(底為2)函數 |
| sin | 正弦函數 |
| cos | 余弦函數 |
| tan | 正切函數 |
| asin | 反正弦函數 |
| acos | 反余弦函數 |
| atan | 反正切函數 |
| sinh | 雙曲正弦函數 |
| cosh | 雙曲余弦函數 |
| tanh | 雙曲正切函數 |
| asinh | 反雙曲正弦函數 |
| acosh | 反雙曲余弦函數 |
| atanh | 反雙曲正切函數 |
| logb | 和log函數一樣 |
| log1px | 當x的絕對值比1小很多的時候,能更加正確的計算log(1+x) |
| gamma | r函數(伽馬函數) |
| lgamma | 等同于log(gamma(x)) |
| ceiling | 返回大于或等于所給數字表達式的最小整數 |
| floor | 返回小于或等于所給數字表達式的最大整數 |
| trunc | 截取整數部分 |
| round | 四舍五入 |
| signif(x,a) | 數據截取函數,x:有效為,a:到a位為止 |
1.2.3 比較運算符及邏輯操作
除了以上的四則運算和函數運算之外,各向量之間還可以進行比較運算,其返回值為真(TRUE)或假(FALSE),比較運算符包括:
> 大于;>= 大于等于; < 小于; <= 小于等于; == 等于; != 不等于。
如:
3 == 5結果為:FALSE
需要注意的是,當進行比較運算的兩個向量的長度不一樣長時,R會將向量補齊,然后再進行比較,輸入以下命令,觀察其運行結果。
a<-1:10 b=c(1,3,5) a==b結果為: [1] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
Warning message:
In a == b : longer object length is not a multiple of shorter object length
其補齊的方式是:較短的向量自我復制,直到與較長的向量的長度一致;當較長向量的長度不是較短向量長度的整數倍時,會返回警告信息,但這不會影響運算的結果。在上例中,向量b自我復制的結果是:
b<-c(1,3,5,1,3,5,1,3,5,1)邏輯操作的對象是邏輯值,在R語言的邏輯操作包括以下幾項:
(1)!
感嘆號表示“取非”。
x<-TRUE !x結果為:[1] FALSE
又如:
x<-c(T,T,F,T,F) !x結果為:[1] FALSE FALSE TRUE FALSE TRUE
(2)&和&&
這兩者都是邏輯“與”,操作都是x&y和x&&y。
如:
x<-c(T,T,F) y<-c(F,T,F) x&&y結果為:[1] FALSE
x&y結果為:[1] FALSE TRUE FALSE
可以看到,&是對每一個元素一一求與,而&&是所有元素求與操作。
(3)|和||
這兩者的使用與前者類似:
x<-c(T,T,F) y<-c(F,T,F) x|y結果為:[1] TRUE TRUE FALSE
x||y結果為:[1] TRUE
(4)異或操作xor()
xor()為異或操作函數,當兩個數值相等時,結果為假;當兩個數值不等時,結果為真,如:
xor(0,1)結果為:[1] TRUE
x<-c(T,T,F) y<-c(F,T,F) xor(x,y)結果為:[1] TRUE FALSE FALSE
(5)all()和any()
判斷數據中是否存在TRUE值,其中all()是在全部為TRUE時返回TRUE,any()是在存在任何一個TRUE時返回TRUE,他們都還有另外一個參數,即是否刪除NA值,即 not available 值:na.rm,其調用格式為:
all(x,na.rm = F) any(x,na.rm = F)當na.rm = F時,在邏輯操作過程中不考慮x中的NA值;否則,在進行邏輯操作過程中考慮x中的NA值。在R中輸入以下命令,觀察其運行的效果。
x <- c(1,3,5,7,9,NA) all(x>5,na.rm=T)結果為:[1] FALSE
any(x>5,na.rm=F)結果為:[1] TRUE
另外,如果想判斷一個邏輯向量中哪些元素為真,可以用函數which(),如
which(x>5)結果為:[1] 4 5
若要構造一個初始邏輯向量,可以用函數logical(),如
logical(5)結果為:[1] FALSE FALSE FALSE FALSE FALSE
1.2.4 R語言的數據結構
1.2.4.1 數組(向量和矩陣)
數組是帶有多個下標的且類型相同的元素構成的集合,可以看成是向量和矩陣的推廣,可用來儲存數值型(numeric)、邏輯型(logical)和字符型(character)三種類型的數據。可以使用函數array()來生成一個數組,其調用格式為:
array(data = NA,dim = length(data),dimnames = NULL)其中:
data: 保存到數組的數據,可以是控制
dim: 指定數組的維數
dimnames: 指定數組個維度的名稱,默認為整數
(x<-array(1:12,dim=c(3,4)))#數值型結果為: [,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
結果為: [,1] [,2] [,3]
[1,] TRUE TRUE TRUE
[2,] TRUE TRUE TRUE
結果為: [,1] [,2] [,3]
[1,] “a” “a” “a”
[2,] “a” “a” “a”
以下的例子展示了如何修改各維度的名稱,輸入以下命令,觀察其運行的效果。
x = array(rpois(6,10),dim=c(2,3),dimnames=list(c("male","female"),c("apple","banana","pear")));x結果為: apple banana pear
male 11 13 9
female 8 2 11
這里,我們使用了rpois()來產生了6個符合泊松分布的數字。
當然,我們的數組不局限于二維,可以是三維或者更多維。
x = array(rpois(24,10),dim=c(2,3,4),dimnames=list(c("male","female"),c("apple","banana","pear"),c("Mon","Tue","Wed","Thu")));x結果為:
, , Mon
? apple banana pear
male 10 11 9
female 8 9 9
, , Tue
? apple banana pear
male 7 12 9
female 7 15 7
, , Wed
? apple banana pear
male 14 13 13
female 9 6 10
, , Thu
? apple banana pear
male 9 11 7
female 13 15 6
上面的例子是一個三維的數組。我們繼續來看這個dimnames。
dimnames這個參數是用來指定有關的每一個維度的名字的,其中第一個維度的兩行分別為male和female,第二個維度的兩個分別為apple,banana,pear。
需要注意的是,一維數組跟向量很相近,二維數組就是矩陣。但是一維數組跟向量在某些函數的處理過程中會有區別的對待,如str()函數:
x = array(rpois(2,10),dim=c(1,2),dimnames=list(c("apple"),c("male","female"))) str(x)結果為: int [1, 1:2] 8 10
- attr(*, “dimnames”)=List of 2
…$ : chr “apple”
…$ : chr [1:2] “male” “female”
在這里我們用到了函數list(),其作用是生成一個列表,在后面我們會做詳細的介紹。對于數組的引用,可用A[i,j,…],輸入以下命令,觀察其運行效果。
A<-array(data=1:36,dim=c(3,3,4))#產生3*3*4維的數組 A[1,2,3]#引用第3層的第1行第2列的元素結果為:[1] 22
A[1,c(1,2),3]結果為[1] 19 22
A[1,,3]結果為:[1] 19 22 25
A[1,,]結果為: [,1] [,2] [,3] [,4]
[1,] 1 10 19 28
[2,] 4 13 22 31
[3,] 7 16 25 34
下面來看看如何定義向量和矩陣。
(1)向量
在前面我們已經介紹了生成向量的一些方法,而在R中可以用函數vector()來生成一個空向量,其調用格式為:
vector(mode = "logical", length = 0)其中
mode:表示的是該向量儲存數據的類型,可取的值有:“logicl”,“integer”,“numeric”,“complex”,“character”及“raw”,默認值是“logicl”
length:表示該向量的長度,默認值為0
(x<-vector(mode="numeric",length=5))結果為:[1] 0 0 0 0 0
與向量相關的函數還有:
as.vector():將其它類型的對象強制轉換成向量
is.vector():判斷對象是否為向量
(1)矩陣
矩陣是一個二維的特殊數組,在R中可以用函數matrix()來生成矩陣,其調用格式為:
matrix(data=NA, nrow=1, ncol=1, byrow=FALSE, dimnames=NULL)其中:
data: 表示該向量要儲存的數據
nrow和ncol: 表示矩陣的行數和列數,注意data的個數等于nrow乘以ncol
byrow: 表示數據是否以行的方式進行排列
dimnames: 指定矩陣各維度的名稱,默認為整數
x = matrix(data=1:6,nrow=2,ncol=3,byrow=T);x結果為: [,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
結果為: [,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
對于矩陣的四則運算(+,-,,/),是對其中對應元素的四則運算,如果要實現線性代數中的矩陣的乘法,則要用%%,輸入以下命令,比較其運算結果:
B<-A<-matrix(data=1:9,nrow=3,ncol=3) A*B結果為: [,1] [,2] [,3]
[1,] 1 16 49
[2,] 4 25 64
[3,] 9 36 81
結果為: [,1] [,2] [,3]
[1,] 30 66 102
[2,] 36 81 126
[3,] 42 96 150
如果要求矩陣的轉置,可以使用函數t(),如:
t(A)結果為: [,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
如果要求矩陣的逆矩陣,可以使用函數solve(),如:
A<-matrix(data=1:4,nrow=2,ncol=2) solve(A)結果為: [,1] [,2]
[1,] -2 1.5
[2,] 1 -0.5
如果要求矩陣的特征值和特征向量,可以使用函數eigen(),如:
eigen(A)結果為:
eigen() decomposition
$values
[1] 5.3722813 -0.3722813
$vectors
[,1] [,2]
[1,] -0.5657675 -0.9093767
[2,] -0.8245648 0.4159736
當然,對于矩陣的運算還有很多,但大多都是與線性代數和數值分析有關,不在此討論。
1.2.4.2 列表
數組(向量或矩陣)所存儲的數據必須屬于同一類型。當數據對象包含有不同的數據類型,則可以采用列表(list)。列表是R語言中使用非常廣泛的一種結構,構成列表的對象有可稱為它的分量,分量可以是不用的模式或類型,如一個列表可以包括數值向量、邏輯向量、矩陣、字符和數組,甚至可以是列表。列表可以用list()函數進行創建,其調用格式如下:
list(var1=componet1,var2=componet12,...)例如:
x<-list(fruit=c("apple","banana","pear"),price=c(1,1,1.5),market=c("newabest"));x結果為:
$fruit
[1] “apple” “banana” “pear”
$price
[1] 1.0 1.0 1.5
$market
[1] “newabest”
在這個列表中,包含了3個分量,第一個是fruit,它儲存的是字符型,長度為3。第二個是price,儲存的是數值型,長度為3,第三個是market,儲存的是字符型,長度為1.亦即,我們可以在一個列表中儲存不同的類型數據,還可以儲存不同的長度數據,每一個分量中都是一個向量(vector)。
列表的引用格式為“列表名[[下標]]”,如
x[[1]]結果為:[1] “apple” “banana” “pear”
x[[1]][2]結果為:[1] “banana”
x[[1]][1:3]結果為:[1] “apple” “banana” “pear”
注意:“列表名[[下標]]”的引用方式,不支持向量格式的下標,如
x[[1:3]]結果為:Error in x[[1:3]] : recursive indexing failed at level 2
如果定義列表的時候指定了各分量的名稱(如x中的“fruit”,“price”,“market”),則在引用的時候可以用分量的名稱作為下標,引用格式為“列表名[[分量名稱]]”,如
x[["fruit"]]結果為:[1] “apple” “banana” “pear”
還有一種調用格式是“列表名$分量名稱”,如
x$fruit結果為:[1] “apple” “banana” “pear”
x$fruit[2]結果為:[1] “banana”
如果要修改列表,可以直接對相應的引用賦值就可以了,例如,apple的價格改為1.2,可以輸入命令:
x$price[1]<-1.2如果要刪除表中的某些項,則只需將空值(NULL)賦值給相應的引用即可。
1.2.4.3 數據框
數據框(data frame)是R中特有的、非常實用的數據結構。數據框是矩陣形式的數據,但矩陣的各列可以儲存不同類型數據。數據框是矩陣的推廣,也是一種特殊的列表。數據框進行統計分析的最為有用的數據類型,每列為一個變量,每行為一個觀測樣本。
在R語言中,可以用函數data.frame()生成數據框,其調用格式如下:
data.frame(..., row.names = NULL, check.rows = FALSE,...)其用法與列表的相同,輸入以下命令,觀察其運行效果。
fruit=c("apple","banana","pear") price=c(1,1,1.5) buy=c(TRUE,FALSE,FALSE) x=data.frame(fruit,price,buy) x結果為: fruit price buy
1 apple 1.0 TRUE
2 banana 1.0 FALSE
3 pear 1.5 FALSE
數據框的列名默認為變量名,也可以重新對列名進行命名,如
(x=data.frame(shuiguo=fruit,jiage=price,goumai=buy))結果為: shuiguo jiage goumai
1 apple 1.0 TRUE
2 banana 1.0 FALSE
3 pear 1.5 FALSE
也可以對行名進行重新命名,如
row.names(x)<-c("item1","item2","item3") x結果為: shuiguo jiage goumai
item1 apple 1.0 TRUE
item2 banana 1.0 FALSE
item3 pear 1.5 FALSE
數據框的引用與矩陣及列表的引用一樣,輸入以下命令,觀察其運行效果。
x[1,]結果為: shuiguo jiage goumai
item1 apple 1 TRUE
結果為:[1] apple banana pear
Levels: apple banana pear
結果為:[1] 1.0 1.0 1.5
1.2.5 R語言的數據導入與導出
1.2.5.1 保存和加載R的數據
在R語言中save()函數用于將數據保存為R數據文件.Rdata,load()函數用于加載R的數據。
a<-1:10 save(a,file="dumData.Rdata")#data文件為當前目錄下文件,必須存在注:可以用getwd()查看R當前的工作目錄,進入當前目錄下的文夾,可以看到已保存的dumData.Rdata文件。一般我們會把數據放在固定的地方以便于查找,這時,可以在保存數據的命令中指定目錄,如
save(a,file="/home/ubuntu/dumData.Rdata") rm(a)#刪除向量a load("/home/ubuntu/dumData.Rdata")#加載目錄中的.RData print(a)#打印結果為: [1] 1 2 3 4 5 6 7 8 9 10
1.2.5.2 導入和加載文本文件
(1)從文本文件讀取數據
把文本文件中的數據導入到R中,可以使用read.table(),其調用格式是:
read.table(file, header = FALSE, sep = "", quote = "\"'",dec = ".", numerals = c("allow.loss", "warn.loss", "no.loss"),row.names, col.names, as.is = !stringsAsFactors,na.strings = "NA", colClasses = NA, nrows = -1,skip = 0, check.names = TRUE, fill = !blank.lines.skip,strip.white = FALSE, blank.lines.skip = TRUE,comment.char = "#",allowEscapes = FALSE, flush = FALSE,stringsAsFactors = default.stringsAsFactors(),fileEncoding = "", encoding = "unknown", text, skipNul = FALSE)其中主要參數意義:
file: 表示要讀取的數據所在文件的文件名
header: 邏輯比那里,取值為TRUE時,表示數據文件第一行為表頭;取值為FALSE(默認值)時,表示數據包含表頭且第一列為序號
sep: 分隔數據的字符,通常是空格
row.names: 向量,表示行名,即樣本名
col.names: 向量,表示列名,即變量名。如果數據文件無表頭,則變量名為“v1”,“v2”的形式
skip: 非負整數,表示讀取數據時跳過的行數
例如:“score.txt”保存的是某班的成績,其中變量包括:姓名、學號、數學、英語、歷史,共5位同學的成績
新打開一個終端,創建表score.txt。wq保存
cd ~ vim score.txt name no math english history zhangsan 0001 90 87 97 lisi 0002 85 78 88 wangwu 0003 95 90 93 dingliu 0004 100 98 99 zhouqi 0005 79 60 71回到打開R語言的終端
讀取數據的代碼及運行效果:
score1<-read.table("score.txt") score1結果為: V1 V2 V3 V4 V5
1 name no math english history
2 zhangsan 0001 90 87 97
3 lisi 0002 85 78 80
4 wangwu 0003 95 90 93
5 dingliu 0004 100 98 99
6 zhouqi 0005 79 60 71
結果為: name no math english history
1 zhangsan 1 90 87 97
2 lisi 2 85 78 80
3 wangwu 3 95 90 93
4 dingliu 4 100 98 99
5 zhouqi 5 79 60 71
如果文本文件中的數據不是以表格的形式保存,則可以用scan()函數讀取,其調用格式為:
scan(file = "", what = double(0), nmax = -1, n = -1, sep = "",quote = if(identical(sep, "\n")) "" else "'\"", dec = ".", skip = 0, nlines = 0, na.strings = "NA", flush = FALSE, fill = FALSE,strip.white = FALSE, quiet = FALSE, blank.lines.skip = TRUE,multi.line = TRUE, comment.char = "", allowEscapes = FALSE,fileEncoding = "", encoding = "unknown",text, skipNul = FALSE)其中主要參數意義:
file: 表示要讀取的數據所在文件的文件名
what: 表示函數返回值的類型,包括numeric,logical,character,list等,其中數值型的初始值為0,字符型的初始值為“”
sep: 表示分隔符的類型
skip: 非負整數,表示讀取數據時跳過的行數
開啟終端,創建表:weight.txt。wq保存
cd ~ vim weight.txt 75.0 64.0 47.4 66.9 62.2 62.2 58.7 63.5 66.6 64.0 57.0 69.0 56.9 50.0 72.0回到打開R語言的終端
例如:weight.txt 保存的是15名學生的體重數據,用san()讀取其中數據,輸入以下命令:
weight<-scan("weight.txt")結果為:Read 15 items
weight結果為: [1] 75.0 64.0 47.4 66.9 62.2 62.2 58.7 63.5 66.6 64.0 57.0 69.0 56.9 50.0 72.0
is.vector(weight)結果為:[1] TRUE
如果在調用scan()函數時,沒有指定參數file,則直接從屏幕上讀取數據,輸入以下命令并觀察運行效果
x<-scan()結果為:1: 2 3 5 7 11 13 17
8:
Read 7 items
結果為:[1] 2 3 5 7 11 13 17
(2)把數據保存到文本文件
把工作空間中的變量保存到純文本文件中,可以使用write()函數,其調用格式為:
其中:
write.table(x, file = "data", ncolums=if(is.character(x) 1 else 5,append = FLASE,sep=" ")x: 矩陣或向量,表示需要保存的數據
file: 表示文件名,默認值為data
ncolumns: 正整數,表示保存到文件中數據的列數,若是字符型數據,默認值為1;若是數值型數據,默認值為5
append: 邏輯變量,取值為TRUE時,表示在已有文件上添加數據;取值為FALSE(默認值)時,寫入一個新文件
例如:在R中輸入以下命令,觀察其運行效果:
A<-matrix(1:25,ncol =5) A結果為: [,1] [,2] [,3] [,4] [,5]
[1,] 1 6 11 16 21
[2,] 2 7 12 17 22
[3,] 3 8 13 18 23
[4,] 4 9 14 19 24
[5,] 5 10 15 20 25
這表明在保存的時候,是按列(ncolumns = 6)寫入文件的。
如果需要將數據以表格格式存入文本文件,可以使用write.table()函數,其調用格式為:
write.table(x, file = "", append = FALSE, quote = TRUE, sep = " ",eol = "\n", na = "NA", dec = ".", row.names = TRUE,col.names = TRUE, qmethod = c("escape", "double"),fileEncoding = "")其中:
x: 矩陣或數據框,表示需要保存的數據
file: 表示文件名
append: 邏輯變量,取值為TRUE時,表示在已有文件上添加數據;取值為FALSE(默認值)時,寫入一個新文件
sep: 表示分隔數據的字符,默認值為空格
例如:在R中輸入以下命令,觀察其運行效果:
Name=c("Alice","Becka","James","Jeffrey","John") Sex=c("F","F","M","M","M") Age=c(13,13,12,13,12) Height=c(56.5,65.3,57.3,62.5,59.0) Weight=c(84.0,98.0,83.0,84.0,99.5) tijian<-data.frame(Name,Sex,Age,Height,Weight) write.table(tijian,file="tijian.txt")1.2.5.3 導入和加載csv文件
csv文件是一種通用的、相對簡單的文本格式,其文件以純文本形式保存表格數據,大部分的程序都支持這種數據格式。在R語言中,可以用write.csv()函數導出R中的數據成.csv格式的數據,其調用格式為:
write.csv(x, file = "", append = FALSE, quote = TRUE, sep = " ",eol = "\n", na = "NA", dec = ".", row.names = TRUE,col.names = TRUE, qmethod = c("escape", "double"),fileEncoding = "")主要的參數說明:
x: 要寫入文件的數據,通常是一個數據框
file: 指定文件名
append: 邏輯變量,取值為TRUE時,在文件后面添加數據;否則,將數據寫入一個新文件,默認值是FALSE
sep: 表示分隔數據的字符,默認值為空格
例如:在R中輸入以下命令,觀察其運行效果:
var1<-1:5 var2<-(1:5)/10 var3<-c("R","and","DataMining","Examples","Case Studies") a<-data.frame(var1,var2,var3)#把三個變量放在數據框中賦值給a names(a)<-c("VariableInt","VariableReal","VariableChar")#對a中的三個變量重命名 write.csv(a,"/home/ubuntu/data_1_01.csv",row.names=FALSE)#導出數據要從csv文件中讀取數據到R的工作空間中,可以用函數read.csv(),其調用格式為:
read.csv(file,header=TRUE,SEP=",",...)其中:
file: 要導入的文件
header: 邏輯變量,表示是否含有列名
sep: 表示csv文件的分隔方式,默認值是逗號分隔符
…: 是進一步的參數
例如:要導入/home/ubuntu/目錄下的data_1_01.csv文件,可輸入以下命令:
b<-read.csv(file="/home/ubuntu/data_1_01.csv") b結果為: VariableInt VariableReal VariableChar
1 1 0.1 R
2 2 0.2 and
3 3 0.3 DataMining
4 4 0.4 Examples
5 5 0.5 Case Studies
總結
- 上一篇: Android中两个textview重叠
- 下一篇: 3G网络结构