在項(xiàng)目過(guò)程中渺尘,取子集時(shí)發(fā)生了bug,現(xiàn)在將我遇到的問(wèn)題總結(jié)一下:
R 版本:3.5.0
操作系統(tǒng):Windows7/Rstudio
Gene2 <- c("GRMZM2G324390", "GRMZM2G435034","GRMZM2G125529", "GRMZM2G173542", "GRMZM2G050912", "AC234185.1_FG004", "GRMZM2G149576", "GRMZM2G128617", "GRMZM2G020898","GRMZM2G104283")
Gene <-c("AC203535.4_FG002", "GRMZM2G408703", "GRMZM2G031311", "GRMZM2G011932", "GRMZM2G171116", "GRMZM2G099528", "GRMZM2G004006", "GRMZM2G139329", "GRMZM2G371795", "GRMZM2G090087","GRMZM2G324390", "GRMZM2G435034","GRMZM2G125529", "GRMZM2G173542", "GRMZM2G050912", "AC234185.1_FG004", "GRMZM2G149576", "GRMZM2G128617", "GRMZM2G020898","GRMZM2G104283")
a<- c(1: 20)
b<- c(11:30)
ab <-c(21:40)
data<-as.data.frame(rbind(a,b,ab))
colnames(data) <-Gene
Gene %in% Gene2
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE
[17] TRUE TRUE TRUE TRUE
data2 <-data[,Gene2]
colnames(data) %in% colnames(data2)
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE
[17] TRUE TRUE TRUE TRUE
從上面的代碼可以看出,取子集的結(jié)果是正確的,但有些時(shí)候Gene2是從data.frame中選取的冀瓦,這時(shí)Gene2 的class
不是character
而是factor
。
這時(shí)候取子集就會(huì)出現(xiàn)問(wèn)題写烤。
Gene2 <-as.factor(Gene2)
data2 <-data[,Gene2]
colnames(data) %in% colnames(data2)
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
[17] FALSE FALSE FALSE FALSE
有幾種方法可以解決上述問(wèn)題:
- 將取子集的數(shù)據(jù)轉(zhuǎn)換為字符串
Gene2<-as.character(Gene2)
- 用
match
進(jìn)行匹配
data2 <- data[,match(Gene2,colnames(data))]
- 用
which
進(jìn)行匹配
data2 <-data[,which(colnames(data) %in% Gene2)]
- 提前設(shè)定環(huán)境變量翼闽,使得在數(shù)據(jù)錄入時(shí),不會(huì)成為Factor
options(stringsAsFactors = FALSE)