粘贴和打印不会产生 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.
我只是粘贴两个字符串,但创建的新行不是特定于平台的,而是始终为“\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.