R 不会将行附加到文件(使用 Cat 或 Write)

Posted

技术标签:

【中文标题】R 不会将行附加到文件(使用 Cat 或 Write)【英文标题】:R doesn't append lines to file (using Cat or Write) 【发布时间】:2017-02-17 22:22:03 【问题描述】:

我尝试了 *** 中的一些选项(例如1),但这也不起作用,所以我的代码可能有错误:

 fileConn<-file("outputR.txt")
for (i in 1:length(lines))
  line = lines[i]
  fields = strsplit(line, "\t")[[1]]
  id = fields[1]
  goIDs = fields[2:length(fields)]
  list = as.list(GOCCANCESTOR[goIDs])
  text = paste(toString(id), ":", toString(goIDs))
  cat(text, file=fileConn, append=TRUE, sep = "\n")


close(fileConn)

当我运行此代码时,它会不断覆盖 outputR.txt 文件中的数据。 有解决此问题的建议吗?

【问题讨论】:

您可以在this帖子中找到答案。 【参考方案1】:

问题是您将 Fileconnection 与 cat 结合使用,那么附加将不起作用。您可以使用几个选项,最简单的一个是: 首先“创建”文件,如果要添加标题,例如:

header = "some header" 
## if you don't want to use a header then leave the header blank
header =""
cat(text, file="outputR.txt", append=FALSE, sep = "\n")

注意append = FALSE,如果你想清除已经存在的文件,这是必要的,否则你必须使用append = TRUE 您可以使用以下方式向其写入文本:

text = text = paste(toString(id), ":", toString(goIDs))
cat(text file="outputR.txt", append=TRUE, sep = "\n")

【讨论】:

谢谢! @Rick Beeloo,您忘记将第二个代码示例中的标题更改为文本,但很清楚【参考方案2】:

这里有两种选择:

1. 以写模式打开文件:

lines <- c("aaaaa", "bbbb")


fileConn<-file("test.txt", "w")
for (i in 1:length(lines))
  line = lines[i]
  cat(line, file=fileConn, append=TRUE, sep = "\n")

close(fileConn)

2 使用带有 append 参数的 write 函数:

lines <- c("aaaaa", "bbbb")

for (i in 1:length(lines))
  line = lines[i]
  write(line,file="test2",append=TRUE)  

【讨论】:

我已经尝试了第二个,这给了我同样的问题(覆盖) 这很奇怪。 fileConn 【参考方案3】:

正如 cat 的帮助页面所述:

附加:逻辑。仅当参数文件是文件名(而不是连接或“|cmd”)时才使用。如果 TRUE 输出将附加到文件中;否则,它将覆盖文件的内容。

因此,如果您在文件参数中使用连接,则附加参数的值将被忽略。

只需将文件参数指定为文件名:

cat(text, file="outputR.txt", append=TRUE, sep = "\n")

您也可以使用指定的正确模式打开文件连接

w+ - 打开读写,最初截断文件。

fileConn <- file("outputR.txt", open = "w+")
for (i in 1:length(lines))
  text <- paste("my text in line", i)
  cat(text, file = fileConn, sep = "\n")

close(fileConn)

【讨论】:

使用cat时需要关闭文件吗? @wiep 如果您使用file 函数打开了文件,那么您必须关闭连接。如果您使用cat 函数中的文件名,cat 会为您处理这个问题。见源github.com/wch/r-source/blob/trunk/src/library/base/R/cat.R

以上是关于R 不会将行附加到文件(使用 Cat 或 Write)的主要内容,如果未能解决你的问题,请参考以下文章

使用 openxml 将行追加到 azure blob 存储中的 excel

使用 StreamWriter 将行附加到文件

仅当文件尚不存在时才将行附加到文件中

将行附加到 pandas DataFrame 而不制作新副本

javascript 将行附加到文件

将行附加到文件