一.产生方式
1.利用关键字c(先定义c,再赋值给变量)
> c(1:3) 使用的冒号用于生成一个数值序列
[1] 1 2 3
>
> a<-c(1:3)
> a
[1] 1 2 3
a(5,2,9,12)
Error in a(5, 2, 9, 12) : could not find function "a"
> c(5,2,9,12)
[1] 5 2 9 12
> a<-c(1:4)
> a
[1] 1 2 3 4
2. b<-seq(from=,to=,by=) 生成从(from)...到(to)... by是步长
> b<-seq(2,100,3)
> b
[1] 2 5 8 11 14 17 20 23 26 29 32 35 38 41 44 47 50 53 56 59 62 65 68
[24] 71 74 77 80 83 86 89 92 95 98
>
3. d<-rep(x1,x2) 生成长度为x2, 值全是x1的向量
> d<-rep(0,5)
> d
[1] 0 0 0 0 0
>
二.修改向量函数
1.插入数据append()
(1)末尾插入append(向量名,插入的数据) 默认是插入末尾
> a<-c(5,2,9,3)
> a
[1] 5 2 9 3
> append(a,100)
[1] 5 2 9 3 100
>
(2)指定位置插入 append(向量名, 插入的数据, after)
after为要插入的位置
> a<-c(5,2,9,3)
> a
[1] 5 2 9 3
> append(a,100)
[1] 5 2 9 3 100
>
>
> append(a,66,1)
[1] 5 66 2 9 3
>
注意:发现第二次插入时第一次插入的10不见了,原因是第一次插入后没有赋值给a,所以a没有变化
2.删除数据
a[-1] 删除第一个数
a[-c(3:4)] 删除a中的 第三到 第四个数
> a
[1] 5 2 9 3
> a[-1]
[1] 2 9 3
> a
[1] 5 2 9 3
> a[-c(3:4)]
[1] 5 2
>
三.其他函数
sum(x) #和
max(x) #最大值
min(x) #最小值
range(x) #取值范围
mean(x) #平均值
var(x) #方差
sort(x) # 自然顺序, 从小 到大排列
rev(x) #反排列, 从大到小排序 rev(sort(x))
prod(x) #乘积, 阶乘prod(1:n)
> a<-c(1:4)
> a
[1] 1 2 3 4
> sum(a)
[1] 10
> max(a)
[1] 4
> min(a)
[1] 1
> range(a)
[1] 1 4
> mean(a)
[1] 2.5
> var(a)
[1] 1.666667
> rev(sort(a))
[1] 4 3 2 1
> prod(a)
[1] 24
>
一.向量的创建
向量是用于存储数值型、字符型或逻辑型数据的一维数组。执行组合功能的函数c()可用来创建向量。各类向量如下例所示:
这里,a是数值型向量,b是字符型向量,而c是逻辑型向量。
注意,单个向量中的数据必须拥有相同的类型或模式(数值型、字符型或逻辑型)。同一向量中无法混杂不同模式的数据。
> a<-c(1,2,3,4,5,6)
> b<-c("www","bioinformatics","cn")
> c<-c(TRUE,FALSE)
通过在方括号中给定元素所处位置的数值,我们可以访问向量中的元素。例如,a[c(2, 4)]用于访问向量a中的第二个和第四个元素。
使用的冒号用于生成一个数值序列。例如,a <- c(2:6)等价于a <- c(2,3, 4, 5, 6)
二.创建向量的函数
1.seq()函数
seq()函数可以用来创建 向量,下面是创建1-9,步长为2 向量。
> v1=seq(1,9,by=2)
> v1
[1] 1 3 5 7 9
也可以不指定步长,指定个数,R会自己计算步长
> seq(0,1,length.out=11)
[1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
如果不写开始的数和步长,默认从1开始,步长为1
不指定起始值,就不能定义步长。
2.rep()函数
rep()函数可以用来重复复制元素。
> rep(1,5) #把1重复五遍
[1] 1 1 1 1 1
> v1<-c(11,12,13,14,15)
> rep(v1,2)
[1] 11 12 13 14 15 11 12 13 14 15
>
> rep(1:4,2)
[1] 1 2 3 4 1 2 3 4
>
> rep(1:4,each=2)
[1] 1 1 2 2 3 3 4 4
>
> rep(1:4,c(2,2,2,2))
[1] 1 1 2 2 3 3 4 4
>
> rep(1:4,c(2,1,2,1))
[1] 1 1 2 3 3 4
>
>
> rep(1:4,each=2,len=4)
[1] 1 1 2 2
>
>
> rep(1:4,each=2,len=10)
[1] 1 1 2 2 3 3 4 4 1 1
>
> rep(1:4,each=2,times=3)
[1] 1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4
>
> rep(1,5) #把1重复五遍
[1] 1 1 1 1 1
> v1 <-c(11,12,13,14,15)
> rep(v1,2)
[1] 11 12 13 14 15 11 12 13 14 15
> rep(1:4, 2)#1-4重复2次
[1] 1 2 3 4 1 2 3 4
> rep(1:4, each = 2)# 1-4的每个元素重复2次,注意和上面的区别。
[1] 1 1 2 2 3 3 4 4
> rep(1:4, c(2,2,2,2))#指定每个元素的重复次数。
[1] 1 1 2 2 3 3 4 4
> rep(1:4, c(2,1,2,1))#指定每个元素的重复次数。
[1] 1 1 2 3 3 4
> rep(1:4, each = 2, len = 4)
# each = 2指定了1-4每个元素重复2次,理论上有8个元素,
# 但又指定的元素的总长度len = 4,因此后面的3 3 4 4没有显示。
[1] 1 1 2 2
> rep(1:4, each = 2, len = 10)
# 指定了总长度为len = 10,但rep(1:4, each = 2)的结果只要8个元素
# 不足10个,会从头自动补齐。所以多了1 1.
[1] 1 1 2 2 3 3 4 4 1 1
> rep(1:4, each = 2, times = 3)#先每个元素重复2次后,再重复3次
[1] 1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4
三.向量连接
要注意的是,向量连接只能用于同一类型的数据,同为数值,同为字符串或布尔值。
向量拼接
> cbind(c1,c2) # 按列拼接
c1 c2
[1,] 1 5
[2,] 2 6
[3,] 3 7
[4,] 4 8
>
> rbind(c1,c2) #按行拼接
[,1] [,2] [,3] [,4]
c1 1 2 3 4
c2 5 6 7 8
>
三.向量运算
#长度相等的向量进行加减乘除运算时,对应元素进行相应的运算。
> c1+c2
[1] 6 8 10 12
> c1*c2
[1] 5 12 21 32
> c1/c2
[1] 0.2000000 0.3333333 0.4285714 0.5000000
> c1+c3
# 如果2个向量长度不等,会按照短的向量重复运算补齐
[1] 2 4 6 8 6 8 10 12