R 文件函数:open 的默认值实际上有什么作用?

R file function: what the default value of open actually does?

提问人:robertspierre 提问时间:7/21/2023 更新时间:7/22/2023 访问量:29

问:

以这个例子为例,我们使用函数参数的默认值:openfile

❯ 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

的文档说:file

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

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

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

文件的文档说这相当于:wtw

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

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

R -IO 文件 写入

评论

0赞 robertspierre 7/22/2023
@stefan_aus_hannover没有链接。?file

答:

2赞 stefan_aus_hannover 7/22/2023 #1

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

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

因此,每次调用时,您都会暂时覆盖初始模式。在调用 之前,不会在 CWD 中打开该文件。writeLines()readwriteLines()

致电后

> writeLines("1", fh)

有一个文件包含名为 test 的文件.txt1

致电后

> writeLines("2", fh)

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

可以运行它并观看 CWD 并在每次后检查文本文件writeLines()

您可以运行它并注意到它一直保持模式fhread

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)

评论

0赞 robertspierre 7/22/2023
“您可以运行它并注意到 fh 一直保持读取模式” - > 我不明白我们如何从您发布的内容中推断出它始终保持阅读模式
0赞 stefan_aus_hannover 7/23/2023
调用仅暂时更改模式。 在读取模式下初始化。这就是 2 之后的行中显示的内容,也是 text 文件被第二个覆盖的原因writeLines()fhreadLines()writeLines()writeLines()