【发布时间】:2021-04-28 15:25:37
【问题描述】:
在R脚本语言中,如何写一行文字,例如以下两行
Hello
World
到一个名为“output.txt”的文件?
【问题讨论】:
在R脚本语言中,如何写一行文字,例如以下两行
Hello
World
到一个名为“output.txt”的文件?
【问题讨论】:
fileConn<-file("output.txt")
writeLines(c("Hello","World"), fileConn)
close(fileConn)
【讨论】:
writeLines() 的选项比sink() 和cat() 的组合快大约十倍
其实你可以用sink()做到这一点:
sink("outfile.txt")
cat("hello")
cat("\n")
cat("world")
sink()
因此:
file.show("outfile.txt")
# hello
# world
【讨论】:
我将使用cat() 命令,如本例所示:
> cat("Hello",file="outfile.txt",sep="\n")
> cat("World",file="outfile.txt",append=TRUE)
然后您可以使用 R 查看结果
> file.show("outfile.txt")
hello
world
【讨论】:
简单的writeLines() 是什么意思?
txt <- "Hallo\nWorld"
writeLines(txt, "outfile.txt")
或
txt <- c("Hallo", "World")
writeLines(txt, "outfile.txt")
【讨论】:
"Hallo\nWorld" 是字符类型的长度为一的向量。试试txt <- "Hallo\nWorld"; is.character(txt) && length(txt) == 1 && is.vector(txt)
writeLines(txt, con="outfile.txt")。
> coefficients<-summary(model) > writeLines(coefficients, "coefficients") Error in writeLines(coefficients, "coefficients") : invalid 'text' argument
你可以在一个语句中做到这一点
cat("hello","world",file="output.txt",sep="\n",append=TRUE)
【讨论】:
我建议:
writeLines(c("Hello","World"), "output.txt")
它比当前接受的答案更短更直接。 没有必要这样做:
fileConn<-file("output.txt")
# writeLines command using fileConn connection
close(fileConn)
因为writeLines() 的文档说:
如果
con是字符串,函数调用file获取 在函数执行期间打开的文件连接 打电话。
# default settings for writeLines(): sep = "\n", useBytes = FALSE
# so: sep = "" would join all together e.g.
【讨论】:
将文本行写入 R 中的文件的短方法可以使用 cat 或 writeLines 来实现,如许多答案中所示。一些最短的可能性可能是:
cat("Hello\nWorld", file="output.txt")
writeLines("Hello\nWorld", "output.txt")
如果您不喜欢“\n”,也可以使用以下样式:
cat("Hello
World", file="output.txt")
writeLines("Hello
World", "output.txt")
虽然writeLines 在文件末尾添加了一个换行符,但cat 却不是这样。
可以通过以下方式调整此行为:
writeLines("Hello\nWorld", "output.txt", sep="") #No newline at end of file
cat("Hello\nWorld\n", file="output.txt") #Newline at end of file
cat("Hello\nWorld", file="output.txt", sep="\n") #Newline at end of file
但主要区别在于 cat 使用 R 对象 和 writeLines 一个 字符向量 作为参数。所以写出来例如1:10 需要为 writeLines 转换数字,而它可以像在 cat 中一样使用:
cat(1:10)
writeLines(as.character(1:10))
和cat 可以接受许多 个对象,但writeLines 只能接受一个 向量:
cat("Hello", "World", sep="\n")
writeLines(c("Hello", "World"))
【讨论】:
tidyverse 版本,带有管道和来自阅读器的write_lines()
library(tidyverse)
c('Hello', 'World') %>% write_lines( "output.txt")
【讨论】:
简单的write.table()怎么样?
text = c("Hello", "World")
write.table(text, file = "output.txt", col.names = F, row.names = F, quote = F)
参数col.names = FALSE和row.names = FALSE确保排除txt中的行名和列名,参数quote = FALSE排除txt中每行开头和结尾的引号。
要重新读入数据,您可以使用text = readLines("output.txt")。
【讨论】:
如果需要,您可以将writeLines() 与sink() 结合使用:
> sink("tempsink", type="output")
> writeLines("Hello\nWorld")
> sink()
> file.show("tempsink", delete.file=TRUE)
Hello
World
对我来说,使用print() 似乎总是最直观的,但如果你这样做,输出将不是你想要的:
...
> print("Hello\nWorld")
...
[1] "Hello\nWorld"
【讨论】:
file <- file("test.txt")
writeLines(yourObject, file)
close(file)
注意yourObject需要是字符串格式;如果需要,请使用as.character() 进行转换。
但是对于每一次保存尝试来说,输入太多了。让我们在 RStudio 中创建一个 sn-p。
在全局选项>>代码>>片段中,输入:
snippet wfile
file <- file(${1:filename})
writeLines(${2:yourObject}, file)
close(file)
然后,在编码过程中,输入wfile 并按Tab。
【讨论】:
file <- file(...) 行在我看来很可疑。是不是既调用file 作为函数又赋予file 一个新的含义?即使在这段代码运行之后,file() 是否仍然有效?目前无权访问 R 安装来测试自己...
ptf <- function (txtToPrint,outFile){system(paste(paste(paste("echo '",cat(txtToPrint),sep = "",collapse = NULL),"'>",sep = "",collapse = NULL),outFile))}
#Prints txtToPrint to outFile in cwd. #!/bin/bash echo txtToPrint > outFile
【讨论】:
在较新版本的 R 中,writeLines 将保留文本中的回车符和空格,因此您无需在行尾包含 \n,您可以将一大块文本写入文件。这将适用于示例,
txt <- "Hello
World"
fileConn<-file("output.txt")
writeLines(txt, fileConn)
close(fileConn)
但您也可以使用此设置来简单地包含具有结构的文本(换行符或缩进)
txt <- "Hello
world
I can
indent text!"
fileConn<-file("output.txt")
writeLines(txt, fileConn)
close(fileConn)
【讨论】: