【问题标题】:R write(append=TRUE) overwrites file contentsR write(append=TRUE) 覆盖文件内容
【发布时间】:2014-09-15 14:45:17
【问题描述】:

这是我的 R 代码:

out = file('testfile')
write('hello', file=out, append=T)
write('world', file=out, append=T)
close(out)

当我运行它(使用 R 3.1.0)时,测试文件包含:

world

我预计:

hello
world

如果我使用cat() 而不是write(),也会发生同样的行为。为什么?如何附加到文件?

【问题讨论】:

    标签: r file-io append


    【解决方案1】:

    您必须打开文件进行写入:

    out = file('testfile', 'w')
    ...
    

    当 R 自动打开(或不打开)连接时有点复杂,但在帮助 (?file) 中有说明。

    如果你不通过'w',每个write 调用都会打开和关闭文件,我猜这会导致你观察到的奇怪行为。

    如果要打开现有文件进行追加,请使用

    out = file('testfile', 'a')
    

    【讨论】:

    • 这真是太棒了。首先, file(name) 没有打开文件,而且 append=T 没有按照它说的去做(我想说这是一个彻头彻尾的错误,如果你同意的话,很好奇)。
    • 在我看来,file(...) 打开文件以进行 reading 并且当您写入已打开以供阅读的文件时,R 会尝试解决问题和解决方法给出了奇怪的结果。如果您之前没有使用file 打开文件,append=TRUE 会执行它应该执行的操作,而只需编写 write("Hello", "filename", append=TRUE)
    • 好的,我明白了。鉴于此解决方法,您是否同意最好使具有非打开文件连接的 write(append=T) 将打开文件以进行追加,而不是覆盖它?这似乎值得为 R 打补丁。
    【解决方案2】:

    提示来自cat 的帮助页面(write 是一个包装器):

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

    使用连接时,您应该设置要打开的连接以进行附加,例如:

    file('testfile', open="a")
    

    【讨论】:

      猜你喜欢
      • 2010-09-20
      • 2017-09-20
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 2013-03-14
      • 2010-12-26
      • 2021-01-11
      • 2021-04-11
      相关资源
      最近更新 更多