《學(xué)習(xí)小組Day5筆記--向偉》

今天是生信學(xué)習(xí)的第五天,今天學(xué)習(xí)了R語言的數(shù)據(jù)結(jié)構(gòu)。

R擁有許多用于存儲數(shù)據(jù)的對象類型,包括向量、標(biāo)量、矩陣、數(shù)組、數(shù)據(jù)框和列表。它們在存儲數(shù)據(jù)的類型、創(chuàng)建方式、結(jié)構(gòu)復(fù)雜度,以及用于定位和訪問其中個別元素的標(biāo)記等方面均有所不同。
----源于《R語言實戰(zhàn)》(第二版)

今天關(guān)于數(shù)據(jù)類型的學(xué)習(xí)主要體現(xiàn)在兩個方面:向量數(shù)據(jù)框

1. 向量

1.1 創(chuàng)建向量
向量是用于存儲數(shù)值型、字符型或邏輯型數(shù)據(jù)的一維數(shù)組。通過函數(shù) c() 可以創(chuàng)建自己需求的向量。如:

> a<-c(1,2,3,4,5)
> a
[1] 1 2 3 4 5
> a<-c(1,2,"hello",4,5)
> a
[1] "1"     "2"     "hello" "4"     "5" 

我先創(chuàng)建了一個由1,2,3,4,5組成的向量a,輸入a就能得到一組數(shù)組;然后我繼續(xù)創(chuàng)建了一個由1,2,"hello",4,5組成的向量,而且仍然命名為a,再輸入a,結(jié)果就變成了后一種結(jié)果,這表明,一個變量,無論經(jīng)過多少次賦值,最終的結(jié)果總以最后一次賦值為準(zhǔn)。
1.2 從向量中提取元素
有時候,我們創(chuàng)建的向量所包含的元素很多,但是在一些情況下我們只需要其中的部分元素,那么我們就需要學(xué)會如何從中提取元素。從向量中提取元素的方式有兩種:
根據(jù)元素位置

> a[3]#表示向量a的第三個元素
[1] "hello"
> a[2:4]#表示向量a的第二到第四個元素
[1] "2"     "hello" "4"    
> a[c(1,5)]#表示向量的第1、5個元素
[1] "1" "5"

根據(jù)值

> a[a==5]#輸出向量a中元素值為5 的向量
[1] "5"
> a[a=="hello"]#輸出元素為“hello”的字符元素
[1] "hello"
> a[a<5]#表示輸出向量a中<5的元素(字符元素“hello”除外)
[1] "1" "2" "4"

2. 數(shù)據(jù)框

相比簡單的向量,數(shù)據(jù)框就要復(fù)雜的多。它包含不同的列,且不同的列可以包含不同模式的數(shù)據(jù)(數(shù)值型、字符型、邏輯性)。數(shù)據(jù)框可以通過函數(shù)data.frame()來創(chuàng)建,函數(shù)用法如下:
賦值的變量x<-data.frame(col1、col2、col3···)col表示列名。
2.1 讀取本地數(shù)據(jù)
如果每次都是新建數(shù)據(jù)框,會顯得很繁瑣,所以有時候會采取直接利用現(xiàn)成的數(shù)據(jù)文件,這就需要學(xué)會如何去讀取本地文件。read.table()函數(shù)可以讀取表格格式文件并將其保存為一個數(shù)據(jù)框。

> read.table(file="huahua.txt",sep="\t",header = T)
Error in file(file, "rt") : 無法打開鏈結(jié)
此外: Warning message:
In file(file, "rt") : 無法打開文件'huahua.txt': No such file or directory

當(dāng)我使用函數(shù)read.table()讀取huahua.txt文件時,出現(xiàn)了報錯,無法打開文件,這是因為這個文件我并未保存在R的工作目錄下,導(dǎo)致讀取失敗。當(dāng)我將文件轉(zhuǎn)移到工作目錄后就能成功導(dǎo)入文件。

> read.table(file="huahua.txt",sep="\t",header = T)
  X1 X2
1  A  1
2  B NA
3  C NA
4  D  3
5  E NA
> a<-read.table(file="huahua.txt",sep="\t",header = T)

其中header參數(shù)的含義是:表示文件是否在第一行包含了變量名的邏輯型變量;
sep含義為:分開數(shù)據(jù)值的分隔符。默認(rèn)是sep“ ”,這表示一個或多個空格、制表符、換行或回車。使用sep=“,”來讀取用逗號來分隔行內(nèi)數(shù)據(jù)的文件,使用sep=“\t”來讀取使用制表符來分割行內(nèi)數(shù)據(jù)的文件。
2.2 設(shè)置列名和行名

> X<-read.csv('doudou.txt')#讀取doudou.txt文件為數(shù)據(jù)框
> X
  X1 X2
1  A  1
2  B NA
3  C NA
4  D  3
5  E NA
> colnames(X)#查看列名
[1] "X1" "X2"
> rownames(X)#查看行名
[1] "1" "2" "3" "4" "5"
> colnames(X)[1]<-"bioplanet"#將列名的第一列名稱改為bioplanet
> colnames(X)
[1] "bioplanet" "X2"    

行名和列名的更改方式也是如此。
2.3 導(dǎo)出數(shù)據(jù)框

> write.table(X,file="xiang.txt",sep = ",",quote = F)

通過write.table()函數(shù)將X數(shù)據(jù)框?qū)С鰹閤iang.txt到當(dāng)前工作目錄下。
2.4 變量的保存與重新加載

> save.image(file = "bioinfoplanet.RData")#保存當(dāng)前所有變量為bioinfoplanet.RData
> save(X,file="test.RData")#僅僅保存當(dāng)前所有變量中的X變量為test.RData
> load("test.RData")

此處save和save.image的用法有一些區(qū)別,后者是一種快捷操作,表示保存當(dāng)前環(huán)境所有變量,前者是有選擇性的選取變量進(jìn)行保存。
2.5 提取數(shù)據(jù)框中的元素

X[1,2]#表示提取第一行第二列
X[1,]#表示提取第一行
X[2]#表示提取第二列

提取元素的方式和提取向量中的元素差不多,只是需要多考慮一點(diǎn),及行和列。
2.6 直接使用數(shù)據(jù)框中的變量
比如以數(shù)據(jù)框中的兩列做散點(diǎn)圖,常規(guī)方法可能是這樣:

a <-data.frame(case=paste("S",1:50)),values=runif(50))
 plot(a$case,a$values)

a就是一個數(shù)據(jù)框,需要使用其中的兩列作圖,這也就需要輸入變量a多次,當(dāng)變量名很長時,會很繁瑣,所以就有了下面兩種更簡單高效的方法。
attach法

attach(a)
plot(case,values)
detach(a)

通過attach將數(shù)據(jù)框加到搜索環(huán)境中,然后直接作圖,不需要輸入數(shù)據(jù)框名。使用完畢后需要detach不然可能跟會和后面的操作出現(xiàn)沖突
with法

> with(mtcars,{
+   plot(mpg,wt)
+ })

用with函數(shù)可直接將需要的變量寫到一起,完成調(diào)用。

3. 問題:

save(X,file="test.RData")這句代碼如果報錯X not found,是為什么,應(yīng)該怎么解決?
我認(rèn)為可能存在兩種情況,一是x這個變量的大小寫弄混了,導(dǎo)致出錯;二是在本環(huán)境中并不存在X這個向量。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容