R中的write.table在定界符中产生空格

问题描述

我正在将数据帧写入.bed文件;数据框看起来不错,但是当我使用以下命令导出它时:

write.table(x = bed_file,file = 'merged_out.bed',row.names = F,col.names = F,quote = F,sep = '\t')

,然后在终端中查看merged.bed的头部,其中某些行用空格分隔,但大多数用制表符分隔。 。 。有什么想法吗?

chr1    3816670 3818113 181 4 
chr1    6452977 6454435 181 1 
chr1    8075042 8075406 181 5 
chr1    8389451 8389713 181 1 
chr1    11190170    11190527    181 1 
chr1    14454661    14454861    181 2 
chr1    16212079    16213143    181 2 

解决方法

我怀疑这些不是“空格”,而是实际上是制表符的空白。

要验证:

### the first row
readLines("merged_out.bed",n = 1)
# [1] "chr1\t3816670\t3818113\t181\t4"

### the first seemingly-wrong line
readLines("merged_out.bed",skip = 4,n = 1)
# [1] "chr1\t3816670\t3818113\t181\t4"

很明显,这两行中没有" "个字符。

如果要查看文件中任何地方是否有文字空间,此表达式将验证整个文件(假设字段中没有合法空间):

any(grepl(" ",readLines("merged_out.bed")))
# [1] FALSE

数据准备:

dat <- read.table(text = "
chr1    3816670 3818113 181 4 
chr1    6452977 6454435 181 1 
chr1    8075042 8075406 181 5 
chr1    8389451 8389713 181 1 
chr1    11190170    11190527    181 1 
chr1    14454661    14454861    181 2 
chr1    16212079    16213143    181 2 ")
write.table(dat,"merged_out.bed",row.names = FALSE,col.names = FALSE,quote = FALSE,sep = "\t")