title: "向量取子集和元素的修改方法"
output: html_document
date: "2023-03-09"
1.向量取子集的方法——用"[]"中括号取子集
(1)按照逻辑值取子集:中括号里是与x等长且一一对应的逻辑值向量
将TRUE对应的值挑选出来,FALSE对应的值丢弃
代码语言:text复制x <- 8:12
x[x==10]
代码语言:txt复制## [1] 10
代码语言:text复制x[x<12]
代码语言:txt复制## [1] 8 9 10 11
代码语言:text复制x[x %in% c(9,13)]
代码语言:txt复制## [1] 9
(2)按照位置取子集:中括号里是单独的下标或由下标组成的向量
代码语言:text复制x <- 8:12
x[4] #取第4个元素
代码语言:txt复制## [1] 11
代码语言:text复制x[2:4] #取第2-4个元素
代码语言:txt复制## [1] 9 10 11
代码语言:text复制x[c(1,5)] #取第1和第5个元素,不能写成x[1,5]
代码语言:txt复制## [1] 8 12
代码语言:text复制x[-4] #反选,去掉第4个元素,其他全保留
代码语言:txt复制## [1] 8 9 10 12
代码语言:text复制x[-(2:4)] #反选,去掉第2-4个元素,其他保留
代码语言:txt复制## [1] 8 12
2.修改向量中的某个/某些元素:取子集 赋值
(1)改一个元素
代码语言:text复制x <- 8:12
x[4] <- 40 #将第4个元素改为40
x
代码语言:txt复制## [1] 8 9 10 40 12
(2)改多个元素
代码语言:text复制x <- 8:12
x[c(1,5)] <- c(80,20) #将第1个和第5个元素分别改为80和20
x
代码语言:txt复制## [1] 80 9 10 11 20
Attention:R语言里的修改,都要赋值,没有赋值就没有发生过!
3.取子集与赋值出现歧义的解决方法
生成10个随机数,用向量取子集的方法,取出其中小于-2的值
代码语言:text复制z = rnorm(n=10,mean=0,sd=18)
z
代码语言:txt复制## [1] 15.080018 37.348448 -2.262640 23.519212 1.758657
## [6] -8.655105 21.539157 -10.966188 4.178155 5.302523
代码语言:text复制z[z<-2]
代码语言:txt复制## [1] 37.34845
代码语言:text复制z
代码语言:txt复制## [1] 2
输出结果为2,显然不是我们想要的结果。这是因为"-2"与前面的"<"紧贴一起,与R语言赋值符号产生歧义,赋值的优先级高于小于-2,因此z输出为2.
解决方法:在负数与"<"之间加空格,或者将负数用括号括起来
代码语言:text复制z = rnorm(n=10,mean=0,sd=18)
z
代码语言:txt复制## [1] -6.871995 -9.571287 -16.963835 3.243446 34.555115
## [6] 2.325657 -10.771052 11.820617 10.357968 -7.175953
代码语言:text复制z[z < -2] #方法1
代码语言:txt复制## [1] -6.871995 -9.571287 -16.963835 -10.771052 -7.175953
代码语言:text复制z[z<(-2)] #方法2
代码语言:txt复制## [1] -6.871995 -9.571287 -16.963835 -10.771052 -7.175953
引用自生信技能树