代码之家  ›  专栏  ›  技术社区  ›  robertspierre

R文件函数:open的默认值到底是什么?

  •  0
  • robertspierre  · 技术社区  · 2 年前

    举个例子,我们使用 open 的参数 file 功能:

    ❯ R
    > fh <- file("test.txt")
    > writeLines("1", fh)
    > writeLines("2", fh)
    > close(fh)
    > quit()
    

    生成的文件只包含最后一行:

    ❯ cat test.txt 
    2
    

    这似乎是一种错误的行为,我本以为这两行都会出现。

    现在,当我们设置 open="w" :

    ❯ R
    > fh <- file("test.txt","w")
    > writeLines("1",fh)
    > writeLines("2",fh)
    > close(fh)
    > quit()
    

    现在这两行都写对了:

    ❯ cat test.txt
    1
    2
    

    文件 文件 说:

    连接的模式是在实际打开时确定的,如果给定open=“”,则会延迟。

    所以看起来模式是由 writeLines 。它的文档说:

    如果连接处于打开状态,则从当前位置写入。如果它没有打开,它会在“wt”模式下的呼叫期间打开,然后再次关闭。

    文件的文件上说 wt 相当于 w :

    “w”或“wt”打开以在文本模式下进行书写。

    因此,由于这两种方法以相同的模式打开文件,我不明白为什么它们会给出不同的结果。

    1 回复  |  直到 2 年前
        1
  •  2
  •   OldManSeph    2 年前

    文件定义为 read 打开您的初始文件。如果您进一步阅读文档,它会指出

    大多数需要写访问或纯文本或纯二进制模式的操作将覆盖尚未打开的连接的默认模式。

    所以每次你打电话 writeLines() 您正在临时覆盖首字母 阅读 模式直到您调用 writeLines()

    你打电话后

    > writeLines("1", fh)
    

    有一个文件包含 1 命名为test.txt

    你打电话后

    > writeLines("2", fh)
    

    另一个 writeLines() 被覆盖,文件现在包含 2

    可以运行此程序,观察CWD并在每次之后检查文本文件 writeLines()

    你可以运行这个并注意到 fh 停留在 阅读 全程模式

    fh <- file("c:/data/test.txt")
    writeLines("1", fh)
    # check contents of test.txt
    writeLines("2", fh)
    # check contents of test.txt
    stringy <- readLines(fh)
    print(stringy)