如何以制表符分隔的方式写入文件?

8

所以我有一个来自bed文件的数据框,叫做input.bed:

     V1       V2       V3  V4
 1 chr1 11323785 11617177 TF1
 2 chr1 12645605 13926923 TF2
 3 chr1 14750216 15119039 TF3
 4 chr1 18102157 19080189 TF1
 5 chr1 29491029 30934636 TF2
 6 chr1 33716472 35395979 TF4
 7 chr1 36712462 37685238 TF5
 8 chr1 37838094 38031209 TF3

这是我从.bed文件中读取的数据帧(.bed文件是制表符分隔的)。我想将每一行输出到不同的文件中。比如说,我想让第一行在input1.bed中,第二行在input2.bed中。

以下是我的尝试:

 for(i in 1:nrow(input.bed))
  {
    file.create(paste("input",i,".bed",sep=""));

   }

 for(i in 1:nrow(input.bed))
 {
    write.table(unlist(input.bed[i,]),paste("input",i,".bed",sep=""),sep="\t");

}

由于某些原因,我的文件输出(来自input1.bed)如下所示:
    "V1"    "chr1"
    "V2"    "11323785"
    "V3"    "11617177"
    "V4"    "TF1"

但我希望输出的结果是以制表符分隔的,就像这样:
    chr1 11323785 11617177 TF1

我做错了什么?


不要使用unlist()。并且在你的write.table()中可能加入quote=FALSErow.names=FALSE - MrFlick
不需要先创建文件 - write.table 会自动创建它们。 - anotherfred
1个回答

7
您可以使用以下方式的一个for循环(q是您的数据框)。
for(i in 1:nrow(q)){
  write.table(x = q[i,], 
              file = paste('input',i,'.bed',sep=''), 
              row.names = F, 
              col.names = F, 
              quote = F, 
              sep = '\t')
}

基本上你的方法是正确的,你只需要告诉函数你不想要所有默认行为(例如列/行名称、引号)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接