GEO踩坑记录:subscript out of bounds
今天是生信星球陪你的第385天
大神一句话,菜鸟跑半年。我不是大神,但我可以缩短你走弯路的半年~
就像歌儿唱的那样,如果你不知道该往哪儿走,就留在这学点生信好不好~
这里有豆豆和花花的学习历程,从新手到进阶,生信路上有你有我!
我是伪放假的花花,回学校走毕业的各项流程,老板跟我说,我有一百多兆的代码要传授给你!我需要把踩坑过程和解决过程记录下来,emmm然后就有了今天的推文😄如果你也想学习,请找到生信菜鸟团数据挖掘系列:
GEO数据挖掘-第一期-胶质母细胞瘤(GBM)
跟着这个文章跑代码,突然报了一个错
(不需要示例数据了,看一看型推文😄)
AssayData <- newAssayData[ID2gene$V1,]
Error in newAssayData[ID2gene$V1, ] : subscript out of bounds
猜测一:索引范围大于向量范围
subscript out of bounds这个报错我见过,有可能是因为索引范围大于向量范围,例如一个向量只有三列,你索引取第四列,就报这个错。所以我来验证一下:
先看看这两个向量:
head(ID2gene$V1)
#[1] "1007_s_at" "1007_s_at" "1053_at" "117_at" "121_at"
#[6] "1255_g_at"
head(rownames(newAssayData))
#[1] "1007_s_at" "1053_at" "117_at" "121_at" "1255_g_at"
#[6] "1294_at"
length(ID2gene$V1)
#[1] 53249
nrow(newAssayData)
#[1] 54613
看起来数据类型是一样的,并且索引没有比向量长,那么问题出在哪里?
all(rownames(ID2gene$V1 %in% newAssayData ))
[1] TRUE
猜测二:行名重复
众所周知,行名不能重复,会不会是因为重复值
length(unique(ID2gene$V1))
#[1] 6792
这个结果让我很震惊,五万多行,去重复完了剩六千????
不太相信,换个函数再确认
library(dplyr)
nrow(count(ID2gene,V1))
#[1] 6792
啊???哦
那么用count看一下每个探针重复多少次。
head(count(ID2gene,V1))
# A tibble: 6 x 2
# V1 n
# <chr> <int>
#1 NA 45857
#2 1007_s_at 2
#3 1053_at 1
#4 117_at 1
#5 121_at 1
#6 1255_g_at 1
原来是有缺失值?而且四万多个?
查看缺失值的另一种方法:
table(is.na(ID2gene$V1))
#FALSE TRUE
# 7392 45857
谜底揭开,就是因为NA。在顺着代码往上看,发现上游的featureData数据框长这样

而这个数据框是这样来的:
featureData <- exprSet@featureData@data
再往上找,就会找到下载文件那一步,所以是数据下载或者读取不完整的锅巴。
getGEO还有一个需要注意的问题,下载不完整,需要删除原来下载的文件,再重新下载。因为它可以自行判断,本地有原始文件,就从本地读取,本地没有才会下载。

这个让我想联想到一件事,数据框下载和读取,是这样现有了行数列数,确定了框架再一行行往里填,如果中断,就会留下一大片NA。画图和写文件都是这样,如果错了,就会生成一个0K的空文件,存在但是打不开。
简书:小洁忘了怎么分身
隔壁生信技能树公益视频合辑(学习顺序是linux,r,软件安装,geo,小技巧,ngs组学!)
国内看B站,教学视频链接:https://m.bilibili.com/space/338686099
国外看YouTube,教学视频链接:https://m.youtube.com/channel/UC67sImqK7V8tSWHMG8azIVA/playlists友情链接:
点击底部的“阅读原文”,获得更好的阅读体验哦😻
初学生信,很荣幸带你迈出第一步。
我们是生信星球,一个不拽术语、通俗易懂的生信知识平台。由于是2018年新号,竟然没有留言功能。需要帮助或提出意见请后台留言、联系微信或发送邮件到jieandze1314@gmail.com,每一条都会看到的哦~
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!