粘贴和打印不会产生 windows 换行代码(在 R 字符串中带有回车符 return)

Paste and print do not produce windows new line codes (with carriage return in R strings)

我只是粘贴两个字符串,但创建的新行不是特定于平台的,而是始终为“\n”。

我期待新行被转换为平台特定代码,其中 R 是 运行:

charToRaw(paste0("a", "\n", "b"))
[1] 61 0a 62

我希望

[1] 61 0d 0a 62

在 Windows 和

[1] 61 0a 62

在所有其他平台上。

如果不显式使用正确的特定于平台的换行代码,我该如何实现?

PS:我不想硬编码“\r\n”以保持平台无关...

另请参阅:

编辑 1: 即使在 Windows 上打印字符串,“\n”也不会转换为“\r\n”:charToRaw(print(paste0("a", "\n", "b")))

你假设的前提是有缺陷的。

您正在使用文字 "\n" 并希望 R 会推断出您想要"\r\n"。如果是这种情况,那么 windows 上的 R 不可能(或者确实非常棘手)为非 windows 用途创建非 CRLF 文档。

我不建议你安装 data.table 的包,但它的 fwrite 功能使用它来确定每行的结尾应该是什么:

str(formals(data.table::fwrite))
# Dotted pair list of 23
# ...truncated...
#  $ eol         : language if (.Platform$OS.type == "windows") "\r\n" else "\n"
# ...truncated...

我建议你在代码中使用类似这样的东西:

EOL <- if (.Platform$OS.type == "windows") "\r\n" else "\n"
charToRaw(paste0("a", EOL, "b"))
# [1] 61 0d 0a 62

在 linux,结果是

EOL <- if (.Platform$OS.type == "windows") "\r\n" else "\n"
charToRaw(paste0("a", EOL, "b"))
# [1] 61 0a 62

就像 hope/expect.