從零開始學習R語言(一)——數據結構之“向量”(Vector)


本文首發於知乎專欄:https://zhuanlan.zhihu.com/p/59688569

也同步更新於我的個人博客:https://www.cnblogs.com/nickwu/p/12537014.html


因為本學期選修了幾門與統計有關的課,開始學習統計學中普遍使用的R語言。雖然之前學習過Pascal、C、Python等語言,但是初次接觸R語言還是感覺跟其他的編程語言有本質的不同。R語言是數學家設計的編程語言,對於一些常見的數學操作和計算要比其他語言簡單得多,因此也更適合用在高效的統計分析上。 我在這里了整理了向量、序列、因子、矩陣、數組、列表等R語言常見的操作,希望能對大家有所幫助~如有建議或批評,也歡迎大家到我的個人博客或知乎專欄評論,謝謝大家!


 

1. [一維]:向量(Vector)

1.1 創建一個向量(R語言中默認創建的是列向量,如需要行向量則需要轉置)

max(a,b,c)
matrix()
length()
v <- c(4, 7, 23.5, 76.2)          #創建一個向量v並對其賦值
v <- c(4,7,23.5,76.2,80,"rrt")    #向量被污染,只要含有字符,則向量中的數字也將被轉變成字符:v變為:"4"    "7"    "23.5" "76.2" "80"   "rrt"
u <- c(4,6,NA,2)                  #NA表示空缺
k <- c(T,F,NA,TRUE)               #TRUE、FALSE分別表示邏輯上的真、假
pH <- c(area1=4.5,area2=7,mud=7.3,dam=8.2,middle=6.3)

1.2 向量的基本操作

length(v)       #求向量的長度
mode(v)         #求向量的類型(若向量中全是數字,則返回numeric;若含有字母,則返回character;若含有TRUE、FALSE,則變為logical)

1.3 向量的索引(Index)

x <- c(0,-3,4,-1,45,90,-5) 
x > 0                  #輸出:FALSE FALSE  TRUE FALSE  TRUE  TRUE FALSE
x[x>0]                 #輸出:4 45 90
x[x <= -2 | x > 5]     #輸出:-3 45 90 -5   提示:R語言中|是或(or)的意思
x[x > 40 & x < 100]    #輸出:45 90
x[c(4,6)]              #輸出:-1 90   提示:[]中為vector時可以索引多個元素
pH <- c(area1=4.5,area2=7,mud=7.3,dam=8.2,middle=6.3)   #此時索引可以用名字來索引內容,如pH['mud]等,類似於python語言中的Dict(字典)

1.4 向量的加減乘除

當兩個向量長度一致時,可對應位置直接加或減,如:

v1 <- c(4,6,87)
v2 <- c(34,32.5,12)
v1+v2  #結果:38.0 38.5 99.0

當兩個向量長度不一致時(要求一個的長度必須是另一個倍數n),短的向量依次與長向量相加(或減)n次。

v1 <- c(4,6,8,10)
v2 <- c(10,2)
v1+v2  #結果:14  8 18 12

乘除、開方等操作會對向量中的每一個元素進行操作(同時適用於factor,matrix,array等)

v1 <- c(4,6,8,24)
2*v1  #結果:8 12 16 48
​
v <- c(4,7,23.5,76.2,80)
x <- sqrt(v)
x  #結果:2.000000 2.645751 4.847680 8.729261 8.944272

1.5 序列(Sequence)

1.5.1 產生一個序列
  1. 直接用"min:max"產生一個[min, max]的序列,若min>max,則為倒序排列,但要注意括號的使用
  2. 還可以使用seq(from=XX,to=XX,length=XX)或者seq(from=1,to=5,by=1)的形式設置序列個數(長度)或者步長來生成序列。
1:1000                       #1~1000的序列
5:0                          #產生5 4 3 2 1 0
10:15-1                      #9~14的序列
10:(15-1)                    #10~14的序列
seq(from=1,to=5,length=2)    #1,5
seq(length=10,from=-2,by=1)  #-2 -1  0  1  2  3  4  5  6  7
1.5.2 使用rep()重復產生序列
rep(5,10)  #5重復10次:5 5 5 5 5 5 5 5 5
rep(1:3,3)  #1 2 3 1 2 3 1 2 3
rep(1:2,each=3)  #1:2分別重復3次:1 1 1 2 2 2
1.5.3 產生正態分布、t分布
rnorm(10)               #產生10個標准正態分布序列
rnorm(4,mean=10,sd=3)   #產生4個均值為10,標准差為3的正態分布序列
rt(5,df=10)             #產生5個自由度df=10的t分布序列</pre>

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM