前面已经在老大jimmy的帮助下,知道我下载的表达矩阵是没有问题的,那么我就直接往下做好了,不过在读取id转换的文件的时候,我又不会了!是因为我用这个最最好用又常用的
read.table
我根本读不出来我想要的表达矩阵的样子!报错的信息如下:
#这个就是记录下这个read.table在这里并不友好
> ids<-read.table('GPL19117-74051.txt',comment.char = '#',sep='\t')
Warning messages:
1: In scan(file = file, what = what, sep = sep, quote = quote, dec = dec, :
EOF within quoted string
2: In scan(file = file, what = what, sep = sep, quote = quote, dec = dec, :
读取的项目数必需是列数的倍数
上面的read.table
的参数调试了好几次,无果,求救老大jimmy!
遂得以解,代码如下:
probe2symbol <- data.table::fread(file = "GPL19117-74051.txt")#对于这样的一个文件,就这么容易读进去了
另外两种报错信息记录如下
关于报错信息:
Error in `.rowNamesDF<-`(x, value = value) : 'row.names'的长度不对
上面的报错是把较长的探针和基因的对应矩阵的基因名那一列给了较短的dat的行名,所以说长度不对
关于另一种报错:
Error in
.rowNamesDF<-
(x, value = value) : 不允许有重复的'row.names'
[图片上传失败...(image-ff1949-1574347357192)]
上面的报错信息是因为当我把dat的探针名按照probe2symbol的PROBE_ID这一列的顺序取出来生成新的矩阵以后,那么此时probe2symbol的SYMBOL_ID这一列,必定顺序是相同的,所以我想直接把SYMBOL_ID这一列给新生成的dat,但是呢,却出现了上么报错,就是因为虽然对应上了,但是由于这个PROBE_ID对应上的SYMBOL_ID是有重复的,而有重复的一列向量是不可以做行名的,所以,就会出现上面row.names的长度不对
的报错。
这点也可以检查一下重复项来看看
table(duplicated(probe2symbol$SYMBOL_ID))
所以新建一列SYMBOL_ID,然后根据某一个值去掉重复的探针后再将SYMBOL_ID变为行名就可以了
ids=ids[ids$probe_id %in% rownames(dat),]
dat[1:4,1:4]
dat=dat[ids$probe_id,]
ids$median=apply(dat,1,median) #ids新建median这一列,列名为median,同时对dat这个矩阵按行操作,取每一行的中位数,将结果给到median这一列的每一行
ids=ids[order(ids$symbol,ids$median,decreasing = T),]#对ids$symbol按照ids$median中位数从大到小排列的顺序排序,将对应的行赋值为一个新的ids
ids=ids[!duplicated(ids$symbol),]#将symbol这一列取取出重复项,'!'为否,即取出不重复的项,去除重复的gene ,保留每个基因最大表达量结果s
dat=dat[ids$probe_id,] #新的ids取出probe_id这一列,将dat按照取出的这一列中的每一行组成一个新的dat
rownames(dat)=ids$symbol#把ids的symbol这一列中的每一行给dat作为dat的行名
dat[1:4,1:4] #保留每个基因ID第一次出现的信息
最后友情宣传生信技能树
全国巡讲:R基础,Linux基础和RNA-seq实战演练 : 预告:12月28-30长沙站