R-基礎(chǔ)-向量
運行代碼快捷鍵:ctrl + enter
tab 補全
控制臺清屏:ctrl +l
賦值(<-):alt + -
放大字體:tools => global options => appearance => zoom => 150%
符號皆為英文符號
?函數(shù)名,查看幫助文檔
設(shè)置工作目錄
setwd('E:\bioinfo_study\one')#設(shè)置工作目錄
Error: '\o' is an unrecognized escape in character string starting "'E:\bioinfo_study\o"
##報錯原因,我直接在文件夾那里復(fù)制路徑,里面的\铆惑,R無法識別,手動改/,即可
##其他錯誤還可能有某抓,路徑當(dāng)中的文件夾不存在
setwd('E:/bioinfo_study/one')
getwd()
[1] "E:/bioinfo_study/one"
常量和變量
- 基本的數(shù)據(jù)類型有數(shù)值型, 邏輯型(TRUE, FALSE)惰瓜,文本(字符串)
> a <- 1:10
> a
[1] 1 2 3 4 5 6 7 8 9 10
> typeof(a)
[1] "integer"#數(shù)值型 (整型) ##double浮點型
> a <- "good"
> a
[1] "good"
> typeof(a)
[1] "character"#字符型
> a <- TRUE
> typeof(a)
[1] "logical"#邏輯型否副,一般產(chǎn)生自比較
####類型轉(zhuǎn)換
as.numeric() #轉(zhuǎn)化為數(shù)值型
as.logical() #轉(zhuǎn)化為邏輯型
as.character()#轉(zhuǎn)化為字符型
常量:數(shù)值、字符串崎坊、邏輯(TRUE备禀、FALSE)
-
變量:用來保存輸入的值或者計算得到的值(賦值的對象)
變量都有變量名,R變量名必須以字母、數(shù)字曲尸、下劃線和句點組成赋续, 變量名的第一個字符不能取為數(shù)字。 變量名是區(qū)分大小寫的另患,
y
和Y
是兩個不同的變量名數(shù)據(jù)結(jié)構(gòu)之向量
-
向量賦值纽乱,及其基礎(chǔ)操作
- 賦值
####字符串元素,用單引號或者雙引號 > name<-'xiaohong' > name [1] "xiaohong" #一個元素的向量 ####數(shù)值元素 ##直接寫一個數(shù)字 > b <- 2 > b [1] 2 ? ####用c()函數(shù)把多個元素或向量組合成一個向量 #元素以逗號分隔昆箕,元素的序號(下標(biāo))從1開始計數(shù) > marks <- c(10, 6, 4, 7, 8) > marks [1] 10 6 4 7 8 > x <- c(1:3, 10:13) # 冒號左右都能取到 > x [1] 1 2 3 10 11 12 13 > x1 <- c(1, 2) > x2 <- c(3, 4) > x3 <- c(x1, x2) # 2組向量拼成1組鸦列,還是向量(一維的) > x3 [1] 1 2 3 4 > print(x3) #顯示向量除了直接輸入向量名,還可以用 print() [1] 1 2 3 4 > name <- c('AA','BB','CC') > name >[1] "AA" "BB" "CC" ? ####用seq 生成連續(xù)的數(shù)值 > x4 <- seq(4) > x4 > [1] 1 2 3 4 > x4 <- seq(2:4) > x4 > [1] 1 2 3 > x4 <- 2:4 ##可以直接用冒號鹏倘,表示2到4薯嗤,2和4都能取到 > x4 > [1] 2 3 4</pre>
- 數(shù)值型向量基礎(chǔ)操作
> length(x3) [1] 4 ####使用 [] 根據(jù)元素的下標(biāo)取值,單獨一個下標(biāo)或者【】里面填起始位置和終止位置第股,冒號連接 #x[2]取出第二個元素 #x[2] <- 99 修改第二個元素為99 #x[c(1,3)] 取出第1应民、3號元素 > x [1] 1 2 3 10 11 12 13 > x[1:4] [1] 1 2 3 10 ###which 返回的是滿足條件的元素的下標(biāo) > which.max(x) [1] 7 #下標(biāo) > which.min(x) [1] 1 #下標(biāo) ##如果用substring是什么效果,這個函數(shù)看名字就知道是在字符串中使用的 > print(x3) [1] 1 2 3 4 > substring(x3,2,3) [1] "" "" "" "" #但是也并沒有報錯 > x3[2:3] [1] 2 3 ? ####### ######四則運算用+ - * / ^表示(加夕吻、減诲锹、乘卵佛、除艾君、乘方),略 #四則運算時如果有缺失值惨驶,缺失元素參加的運算相應(yīng)結(jié)果元素仍缺失 #等長向量的運算為對應(yīng)元素兩兩運算 #兩個不等長向量的四則運算稚矿,規(guī)則是每次從頭重復(fù)利用短的一個庸诱,示例如下 > x1 <- c(1, 2) #2個元素 > x4 [1] 2 3 4 #3個元素 > x1+x4 [1] 3 5 5 # 先按下標(biāo)對應(yīng)相加,然后循環(huán)長度短的那個晤揣,即1+4=5 Warning message: ###兩個向量的長度不是倍數(shù)關(guān)系會發(fā)出警告 In x3 + x4 : longer object length is not a multiple of shorter object length ? #除法取整 > 5 %/% 3 [1] 1 #取余 > 5 %% 3 [1] 2 ###取余的一個應(yīng)用是桥爽,判斷某數(shù)是不是偶數(shù)、3的倍數(shù)昧识、5的倍數(shù)等 x %% 2 == 0 ? ######基礎(chǔ)常用統(tǒng)計函數(shù) > x <- c(33, 55, 11) > sort(x) ##正序 [1] 11 33 55 > rev(sort(x)) ##倒序 [1] 55 33 11 > order(x) ##正序的下標(biāo) [1] 3 1 2 > sum(x) #和 [1] 99 > mean(x) #均值 [1] 33 > var(x) #方差 [1] 484 > sd(x) #標(biāo)準(zhǔn)差 [1] 22 > min(x) > [1] 11 > max(x) > [1] 55 > prod(x) #乘積 > [1] 19965 > cumsum(1:5) #1 2 3 4 5累加 > [1] 1 3 6 10 15 #一步一步累加的和 > cumprod(1:5) > [1] 1 2 6 24 120 #一步一步累乘的積 > sqrt(c(1, 4, 6.25)) > [1] 1.0 2.0 2.5 #平方根 ? ######其他函數(shù) #如log10 ? > a <- c(1,10,100) > a > [1] 1 10 100 > log10(a) > [1] 0 1 2</pre>
“為了查看這些基礎(chǔ)的數(shù)學(xué)函數(shù)的列表钠四,運行命令help.start(), 點擊鏈接“Search Engine and Keywords”跪楞, 找到“Mathematics”欄目缀去, 瀏覽其中的“arith”和“math”鏈接中的說明”
--R語言教程-
邏輯型向量
邏輯值一般產(chǎn)生自比較、判斷
> c(1, 3, 5) > 2 [1] FALSE TRUE TRUE > (1:4) >= (4:1) [1] FALSE FALSE TRUE TRUE > c(1, NA, 3) > 2 [1] FALSE NA TRUE > NA == NA [1] NA ####使用 is.na 判斷值是否是NA > is.na(c(1, NA, 3)) [1] FALSE TRUE FALSE ####比較運算符 < <= > >= == != %in% ### x %in% y甸祭,判斷x向量中的元素能否在y中找到 > c(NA,3) %in% c(2,3,4) [1] FALSE TRUE > c(3,4) %in% c(2,3,4) ##無論下標(biāo)一致與否缕碎,找到就是true [1] TRUE TRUE #### > match(c(1, 3), c(2,3,4,3)) [1] NA 2 #####邏輯運算符 與 & 或 | 非 ! > 1==2&3!=4 [1] FALSE > 1==2|3!=4 [1] TRUE #####使用 all 判斷邏輯向量的所有元素為真池户,全部為真咏雌,則TRUE > c(1, NA, 3) > 2 [1] FALSE NA TRUE > all(c(1, NA, 3) > 2) [1] FALSE ####使用 any 判斷邏輯向量的至少有一個元素為真 > any(c(1, NA, 3) > 2) [1] TRUE ##返回真值的下標(biāo) > which(c(1, NA, 3) > 2) [1] 3 #####使用 identical(x,y) 比較xy的內(nèi)容是否完全相同 > identical(c(1,2,3), c(1,2,NA)) [1] FALSE > identical(c(1,2,3), c(1,2,3)) [1] TRUE #### 使用 duplicated 判斷重復(fù) > duplicated(c(1,2,1,3,NA,4,NA)) [1] FALSE FALSE TRUE FALSE FALSE FALSE TRUE #第一次出現(xiàn)不會被認(rèn)為重復(fù) ####使用 unique 去重 > unique(c(1,2,1,3,NA,4,NA)) [1] 1 2 3 NA 4 #順序還是原來的第一次出現(xiàn)的那個</pre>
- 字符型向量基礎(chǔ)操作
> ############################## 拼接 ############################### > a <- 1:15 > a [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #####使用 rep 生成重復(fù)的元素凡怎,注意!4ο印栅贴!不是repet() > b <- rep("gene",times=15) ##rep("gene",15)也可以 > b [1] "gene" "gene" "gene" "gene" "gene" "gene" "gene" "gene" "gene" "gene" "gene" [12] "gene" "gene" "gene" "gene" ##### paste 拼接兩個向量 > paste(b,a) [1] "gene 1" "gene 2" "gene 3" "gene 4" "gene 5" "gene 6" "gene 7" "gene 8" [9] "gene 9" "gene 10" "gene 11" "gene 12" "gene 13" "gene 14" "gene 15" ###注意1:本來a是數(shù)值型斟湃,b是字符串熏迹,paste自動把數(shù)值型向量轉(zhuǎn)換為字符型 ###注意2:gene和1之間存在空,這是默認(rèn)用空格連接 ###注意3:及時查看幫助 #paste (..., sep = " ", collapse = NULL)#語法,可看到默認(rèn)分隔符 #paste0(..., collapse = NULL)#語法凝赛,這個沒有分隔 #所以: > paste(b,a,sep="") [1] "gene1" "gene2" "gene3" "gene4" "gene5" "gene6" "gene7" "gene8" "gene9" "gene10" [11] "gene11" "gene12" "gene13" "gene14" "gene15" > paste0(b,a) [1] "gene1" "gene2" "gene3" "gene4" "gene5" "gene6" "gene7" "gene8" "gene9" "gene10" [11] "gene11" "gene12" "gene13" "gene14" "gene15" ###再簡化 > paste0("gene",1:5) [1] "gene1" "gene2" "gene3" "gene4" "gene5" ###再拓展 > paste0(c("a","b","c"),seq(3),collapse = "") #collapse參數(shù)是拼成一個元素 [1] "a1b2c3" ##注意順序注暗,采用一般向量間運算規(guī)則 ? ########################### 大小寫轉(zhuǎn)換 ############################## > d <- c("a","b","c") > toupper(d) [1] "A" "B" "C" > tolower(c("PASSWORD")) [1] "password" ? ###################### 取子串 ################################## # substr(x, start, stop) > substr("password",1,4) [1] "pass" > substr(c('JAN07', 'MAR66'), 1, 3)##注意!D沽浴捆昏!是對每個元素取1到3字符,向量長度不變毙沾。與 【】 取子集區(qū)分 [1] "JAN" "MAR" > name <- c('AA','BB','CC') > name[2:3] [1] "BB" "CC" #向量的長度改變 > substring(c('JAN07', 'MAR66'), 4)##stop不寫骗卜,默認(rèn)取到最末 [1] "07" "66" ? ########################## 拆分 ################################ 語法strsplit(x, split, fixed = FALSE, perl = FALSE, useBytes = FALSE) > y <- '10,8,7,abc,&' > strsplit(y, ',', fixed=TRUE)[[1]] [1] "10" "8" "7" "abc" "&" ##以“,”分隔左胞,TRUE:完全分割 ? ######################## 替換 #################### grep(pattern, x, ignore.case = FALSE, perl = FALSE, value = FALSE, fixed = FALSE, useBytes = FALSE, invert = FALSE) #替換的模式寇仓,操作對象, gsub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE, fixed = FALSE, useBytes = FALSE) > x <- '1, 3; 5' > gsub(';', ',', x, fixed=TRUE) #冒號 替換成 逗號烤宙, [1] "1, 3, 5" > grep(3,x) #抓取x中的3 [1] 1 #返回數(shù)量 > grep(3,x,fixed=TRUE) [1] 1</pre>
其他
> c <- 33.3 ##浮點數(shù) > typeof(c) [1] "double" #浮點型 > b <- 2 > b [1] 2 > typeof(b) [1] "double" ##在R語言中數(shù)值一般看作double, 如果需要明確表明某些數(shù)值是整數(shù)遍烦, 可以在數(shù)值后面附加字母L > class(b) [1] "numeric" > d <- 2L #大寫L,換成其他字母不可躺枕,小寫l也不可服猪。 > class(d) [1] "integer" ## 2L是個整型。 > typeof(d) [1] "integer" ##typeof和class都是返回類型拐云,integer和double都是numeric > y <- 1:5 > typeof(y) [1] "integer" #整型 > y2 <- seq(5) > typeof(y2) [1] "integer" #整型 > y3 <- c(1,2,3,4,5) #用c()函數(shù)就是浮點型 > class(y3) [1] "numeric" > typeof(y3) [1] "double"</pre>
貼一個網(wǎng)上的資料:
- 賦值
-