R語(yǔ)言系列2 | 變量類型1-向量1

“ 如果說編程是蓋一棟大樓,那么說,變量就是這棟大樓的各種建筑材料。想蓋好大樓,我們就應(yīng)該理解每種材料的特性以及使用方法。”

也許你過去接觸過編程的理論,也許你沒有,但是這都無關(guān)緊要,因?yàn)槲視?huì)通過R的系列教程,讓你的編程技能從無到有,可以處理日常的基本的矩陣文件或者表格文件,完成統(tǒng)計(jì)分析。

如果你過去接觸過R語(yǔ)言,但是只限于使用別人的代碼來運(yùn)行,出錯(cuò)了就不知如何是好,那么這一系列教程將是你通向正確的光芒,指引你修改和優(yōu)化別人的代碼。

我將從編程的角度來講解R語(yǔ)言的書寫,而不是單純的講解如何掉包以及如何使用R來運(yùn)行已有的代碼。同樣的,每篇文章結(jié)束以后都會(huì)有小小的練習(xí),讓你的R水平快速進(jìn)步,直到能自己書寫數(shù)據(jù)處理分析過程。

我的全流程是打算這樣安排,首先是變量部分,大約花費(fèi)10-15篇文章進(jìn)行介紹,讓你了解到R形形色色的變量類型以及如何使用他們,然后通過3-5節(jié)的內(nèi)容進(jìn)行講解編程的控制流程,之后就是讀取和寫入數(shù)據(jù)1-2節(jié),最后是函數(shù)編寫,3-5節(jié)。

到這里為止,基礎(chǔ)教程就講完了,你就可以去看ggplot2的教程或者dplyr以及reshape2等教程了。然后后面打算出一點(diǎn)進(jìn)階的知識(shí),關(guān)于R的高性能編程,內(nèi)存管理,面向?qū)ο蠛彤惓2东@的知識(shí),有興趣的可以參考看看。

!!!目前位置是教程2 變量類型1 - 向量!!!

1 什么是向量

說起來什么叫向量,我們還是先說一下什么叫變量。變量,望文生義,它就是可變的量,你把值傳給它,它就是多少,并且可以進(jìn)行修改,所以就叫變量。跟變量相對(duì)的概念叫做常量,這里暫且不提,后面會(huì)有專門的教程進(jìn)行講解。

對(duì)于任何一門編程語(yǔ)言,變量都是最基本的構(gòu)成,可以沒有函數(shù)和類,但是一定會(huì)有變量,我個(gè)人對(duì)于變量的理解就是,變量是一種容器,裝著你需要使用的東西。這句話后面你慢慢體會(huì),就會(huì)理解了.

在R語(yǔ)言中,最最基礎(chǔ)的一種容器就是向量了,你所見的高階數(shù)據(jù)結(jié)構(gòu)(矩陣 數(shù)據(jù)幀以及array等等),要么是向量的變體,要么是向量的組合而成。下面來介紹一下什么是向量。

向量,是由一組同一數(shù)據(jù)類型的元素所構(gòu)成的一種一維結(jié)構(gòu),如果不傳入同一類型數(shù)據(jù),R會(huì)替你轉(zhuǎn)化為同類型數(shù)據(jù)。

!!!!!在Rstudio中,按下ctrl+enter鍵可以單行執(zhí)行代碼!!!!!!

2 向量的創(chuàng)建

每一種數(shù)據(jù)類型都有它的創(chuàng)建方法,R的向量也不例外。作為一種動(dòng)態(tài)語(yǔ)言,定義變量之前是不需要聲明的,我們可以定義。并且R定義變量具有多種方式,在此為了不讓大家迷惑,只使用最簡(jiǎn)單也是最常用的一種向量定義方式c()。

# 創(chuàng)建向量
v1 <- c(1,2,3,4)
v2 <- c('a','g',3)
v3 <- c(TRUE,FALSE,TRUE)
# 查看向量 直接輸入向量名字即可
v1

上面的例子中我們定義了三組向量,他們分別是v1,v2,v3,其中v1內(nèi)部存的都是數(shù)字,v2存了數(shù)字和向量,而v3存了所謂的布爾值,即T和F。

看到這里你不會(huì)產(chǎn)生疑問嗎?我們剛剛說過向量只能是同一種數(shù)據(jù)類型,但是v2為什么有字符串和數(shù)值而且還不會(huì)報(bào)錯(cuò)呢?讓我們使用class()函數(shù)打印一下類型看看。

> class(v2)
[1] "character"

我們可以看到,v2已經(jīng)是一個(gè)字符串類型了,R給我們把元素類型從數(shù)值轉(zhuǎn)化為了字符型,而我們未來使用它運(yùn)算的時(shí)候還會(huì)轉(zhuǎn)化回來。怎么樣,R是不是很聰明呢?

3 向量的索引

這一部分我們要講解關(guān)于向量的索引,上面的部分我們已經(jīng)學(xué)會(huì)了如何創(chuàng)建一個(gè)向量了,但是我們需要使用其中的一個(gè)值或者多個(gè)值,我們?cè)撛趺崔k呢?

我們將從向量,矩陣或者數(shù)據(jù)框中取特定位置的值的操作稱為索引,那么我們應(yīng)該如何在向量中進(jìn)行索引操作呢?在R中,我們有三種最常用的索引操作,我稱他們分別是直接索引,布爾索引以及范圍索引。

直接索引:在向量中,元素的位置是從1開始的,也就是說,我們可以使用位置取到每個(gè)元素的值,這就是直接索引。

> # 直接索引
> v1[3]
[1] 3
> v2[1]
[1] "a"
> v3[2]
[1] FALSE

我們可以看到,使用[]可以進(jìn)行向量的索引操作,查找向量中的每一個(gè)元素,這種方法非常簡(jiǎn)單,大家嘗試一下就懂了。

布爾索引:在R語(yǔ)言中,我們還可以使用一種非常特殊的索引方法,即使用布爾值進(jìn)行索引,布爾值為T的位置被取到,布爾值為F的位置則被排除,案例如下

# 布爾值索引
> v1[c(T,F,T,F)]
[1] 1 3
> v2[c(F,F,F,T)]
[1] "ao"

我們可以看到T的位置被保留了,F(xiàn)的位置被刪除了,然后返回了一個(gè)新的向量。我們還可以發(fā)現(xiàn),我們的索引本身也是一個(gè)向量,所以我們可以把索引存在向量里,然后去取值。

# 把索引裝進(jìn)向量里
index_v <- c(T,F,T,F)
v1[index_v]
[1] 1 3

范圍索引:第三種索引方式是使用范圍進(jìn)行索引,即我們可以在一個(gè)范圍內(nèi)去取向量的元素。

# 多值索引
v1[c(1,4)]
[1] 1 4
v2[c(2,3,4)]
[1] "g"  "3"  "ao"

上面是使用多個(gè)位置進(jìn)行索引,下面講解一下使用范圍索引

# 范圍索引
v1[1:3]
[1] 1 2 3
v2[2:4]
[1] "g"  "3"  "ao"
v3[1:4]
[1]  TRUE FALSE  TRUE FALSE

是不是非常簡(jiǎn)單呢?

4 向量的增刪改

知道了如何對(duì)向量進(jìn)行索引操作,那么進(jìn)行增刪改也就不再是什么問題了。首先是進(jìn)行修改操作,

# 修改v1的第一個(gè)元素為999
v1[1]<-999
# 修改v1的3,4位置元素為888 666
v1[c(3,4)] <- c(888,666)
v1
[1] 999   2 888 666

這就是向量的修改操作了,只要你索引到了,然后傳入對(duì)應(yīng)長(zhǎng)度的向量,就可以完成修改了。

下面講解向量的增加操作,首先是比較簡(jiǎn)單的末尾增加

# 增加元素
v1[5] <- 7
v1[10] <- 11
v1

如果在向量末尾添加新元素則直接像修改操作一樣即可,但是如果向量長(zhǎng)度為5,在位置10添加元素,則會(huì)對(duì)6 7 8 9 位置填充缺失值NA,然后在10這個(gè)位置添加新元素。

下面是在向量的第一個(gè)位置進(jìn)行添加元素,

# 頭插入元素
v1 <- c(666,v1)
v1

這就是在頭部添加元素的方法了。
使用上面的方法也可以合并多個(gè)向量到一個(gè)向量中,再此不進(jìn)行演示,后面留作練習(xí)。

最后講一下向量的刪除操作,在R中,使用-index來進(jìn)行刪除

# 刪除第一個(gè)元素
v1 <- v1[-1]
v1
# 刪除最后一個(gè)元素
v1 <- v1[length(v1)]
v1
# 刪除多個(gè)元素
v1 <- v1[c(-1,-2,-4)]
v1

上面的操作就是對(duì)向量中元素進(jìn)行刪除的操作了。

最后別忘了運(yùn)行一下這句代碼,后面會(huì)講解

rm(list = ls())

最后,留一點(diǎn)小小的練習(xí),練習(xí)的答案將會(huì)在下一期R系列推文中展示,

# 創(chuàng)建5元素向量三個(gè) 一個(gè)數(shù)值型 一個(gè)字符串型 一個(gè)布爾型
# 使用布爾向量對(duì)數(shù)值向量進(jìn)行索引
# 自己構(gòu)建索引查找字符向量的1 3 5位置的元素
# 合并字符向量和數(shù)值向量 名為mer1
# 刪除mer1向量的第一個(gè)元素
# 在mer1末尾插入元素lalala
# 刪除所有的元素
rm(list = ls())

下次內(nèi)容更精彩哦,關(guān)注不迷路!

如果你喜歡我的文章,請(qǐng)收藏我的文章并且給我個(gè)贊,你的支持就是我更新的最大的動(dòng)力,關(guān)注我會(huì)有更多驚喜哦,專注于生物信息學(xué)以及數(shù)據(jù)分析入門和進(jìn)階教程,也許我給不了你從10-100,但是我可以給你最好的從0-10!

最后,關(guān)注我的公眾號(hào),領(lǐng)取更多學(xué)習(xí)資料吧!!!

打開v搜索,”輕松玩轉(zhuǎn)生信“或者從下面文章進(jìn)去獲取二維碼關(guān)注哦

二維碼傳送門

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容