从零开始学习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 产生一个序列
  • 直接用"min:max"产生一个[min, max]的序列,若min>max,则为倒序排列,但要注意括号的使用

  • 还可以使用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>

猜你喜欢

转载自www.cnblogs.com/nickwu/p/12537014.html