R:writeLines或write,如何防止被覆盖的行

时间:2017-08-23 16:29:29

标签: r file-io

我使用writeLines写入文件,但它似乎覆盖了上一行。最快/最喜欢的方法是什么?

使用writeLines

fd <- file("foo.Rmd")
writeLines('first line', fd)
writeLines('second line', fd)
close(fd)

$ cat foo.Rmd 
second line

使用写入

fd <- file("foo.Rmd")
write("foo", fd)
write("boo", fd, append=TRUE)
close(fd)

$ cat foo.Rmd
boo

2 个答案:

答案 0 :(得分:6)

对于file/writeLines,您忘记了打开操作的模式。它可以是“w”或“wt”。

fd <- file("foo.Rmd", open = "wt")
writeLines('first line', fd)
writeLines('second line', fd)
close(fd)

readLines("foo.Rmd")
[1] "first line"  "second line"

对于write,参数file不是连接,它是文件名,字符串。

write("foo", "foo.Rmd")
write("boo", "foo.Rmd", append=TRUE)
readLines("foo.Rmd")
[1] "foo" "boo"

#unlink("foo.Rmd")

答案 1 :(得分:1)

将两行连接成一个向量并将其发送到writeLines()

fd <- file("foo.Rmd")
lines <- c('first line','second line')
writeLines(lines,fd)
close(fd)

如果你想让它对于不同大小的列表更通用,你可以将行作为第一行开始,然后在循环中连接其他行。假设您有一个名为data的列表,其中包含n行:

fd <- file("foo.Rmd")
lines <- data[1]
n=length(data)
for(i in (2:n)){
    lines <- c(lines,data[i])
}
writeLines(lines,fd)
close(fd)