在 R 中,如何从列表写入每行包含一定数量元素的文件?

In R, How to write from a list to file with a set amount of elements on each line?

假设我有一个包含 23 个元素的列表。

ls <- list(1:23)

我想写入一个文件,该文件每行有 5 个元素,用制表符分隔,直到不再可能:

1   2   3   4   5
6   7   8   9   10
11  12  13  14  15
16  17  18  19  20
21  22  23

我该怎么做?我在 write.lines 或 write.table.

中没有看到任何选项

@akrun 的代码效果最好:

cat(gsub("\s*((\d+\s+){1,4}\d+)", "\1\n",
      paste(unlist(ls), collapse="\t")), '\n', file = 'file1.txt')

十进制值有一个小错误,结果 file1.txt 如下所示:

0.0005862      0.0005983      0.0006225      0.0006637      0
.0006622      0.0006197      0.000599      0.0005983      0
.0006247      0.0006707      0.0006641      0.0006253      0
.0006087      0.0006234      0.0006807      0.0007485      0
.0007546      0.0007      0.000643      0.0006183      0
.0006264      0.0006819      0.000697      0.0006453      0

您首先需要定义块,我使用具有 chunk 功能的 BBmisc 来获取 N 个元素的块(在您的情况下为五个)。 然后你可以使用 write.table 有 append 选项。

library(BBmisc)

x <-list(1:20)
n<-5

splited<-chunk(x[[1]],n)

for(i in 1:length(splited)){
  x=splited[[i]]
  line=paste(x,collapse = "\t")
  write.table(line, file = "output.txt", sep = "\t", 
  row.names = FALSE, col.names = FALSE, quote = FALSE, append = T)
}

此致

可以用catgsub来完成。 unlistlistpaste 组合成一个字符串,在每个带空格的 'n' 数字块处插入下一行 (\n),并使用 cat 写入控制台

cat(gsub("\s*((\d+\s+){1,4}\d+)", "\1\n", 
        paste(unlist(ls), collapse="\t")), '\n')
#1  2   3   4   5
#6  7   8   9   10
#11 12  13  14  15
#16 17  18  19  20
#21 22  23

或写入文件

cat(gsub("\s*((\d+\s+){1,4}\d+)", "\1\n",
      paste(unlist(ls), collapse="\t")), '\n', file = 'file1.txt')

如果它是一个带有科学记数法等的复杂数据,我们可以将split变成一个list,然后在末尾附加NA用于那些元素数量较少的元素

v1 <- unlist(ls)
lst1 <- split(v1, (seq_along(v1)-1) %/% 4 + 1)
mat1 <-  do.call(rbind, lapply(lst1, `length<-`, max(lengths(lst1))))
write(mat1, 'file2.txt')