write.table in R produces spaces in delimited

1.3k Views Asked by At

I'm writing a dataframe to be a .bed file; the data frame looks fine, but when I export it using:

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

and then view the head of merged.bed in terminal, some rows are space-delimitated but most are tab delimitated . . . any ideas?

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 
1

There are 1 best solutions below

0
On

I suspect that those are not "spaces" but just blank space that are actually tabs.

To verify:

### 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"

It is clear that there are no " " characters in those two lines.

If you want to see if there are any literal spaces anywhere in the file, this expression will verify the entire file (assuming that you have no legitimate spaces in the fields):

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

Data prep:

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")