耗时很长的程序忘加nohup就运行了怎么办?,有一位朋友留言提到了Excel的一个坑,这个之前也专门有文章(Excel改变了你的基因名,30% 相关Nature文章受影响,NCBI也受波及)讲述。
这让我想起来很早之前碰到的一个关于基因名的诡异问题,数千个基因读进来的数据框只有几百行,head
和tail
查看都没问题,问题出现在中间部分基因存在的引号上面了。
以下面这个简单数据为例子看下是怎么回事?
text <- "Gene;Samp1;Samp2
Pou5f1;23;34
Acg't;22;21
Deg;33;34
Oct'4;25;27
Sox2;12;13"
读入数据,查看下
data <- read.table(text=text, sep=";", row.names=1, header=T)
data
5个基因,读进去之后只有3个了。
Samp1 Samp2
Pou5f1 23 34
Acgt;22;21\nDeg;33;34\nOct4 25 27
Sox2 12 13
原来是引号在搞鬼,R默认在遇到引号时会认为两个引号中间的字符属于同一列。这样做的好处是某一列的内容中可包含列分隔符而不影响数据读取,坏处如上。
因为通常遇到的数据是不会在列内容中包含引号的,所以quote=""
成了我读取数据的标配,尽量不再被这个问题困扰。comment=""
也是类似 (默认#
开头的行会被忽略,有没有因此丢失过行呢?)。
data <- read.table(text=text, sep=";", row.names=1, quote="", header=T, comment="")
data
读进来,数据如下,问题解决
Samp1 Samp2
Pou5f1 23 34
Acg't 22 21
Deg 33 34
Oct'4 25 27
Sox2 12 13