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