Trong ngôn ngữ kịch bản R, làm cách nào để viết các dòng văn bản, ví dụ hai dòng sau
Hello
World
đến một tệp có tên "output.txt"?
Trong ngôn ngữ kịch bản R, làm cách nào để viết các dòng văn bản, ví dụ hai dòng sau
Hello
World
đến một tệp có tên "output.txt"?
Câu trả lời:
fileConn<-file("output.txt")
writeLines(c("Hello","World"), fileConn)
close(fileConn)
writeLines()
nhanh hơn khoảng mười lần sau đó là sự kết hợp của sink()
vàcat()
Trên thực tế bạn có thể làm điều đó với sink()
:
sink("outfile.txt")
cat("hello")
cat("\n")
cat("world")
sink()
do đó làm:
file.show("outfile.txt")
# hello
# world
Tôi sẽ sử dụng cat()
lệnh như trong ví dụ này:
> cat("Hello",file="outfile.txt",sep="\n")
> cat("World",file="outfile.txt",append=TRUE)
Sau đó, bạn có thể xem kết quả từ với R với
> file.show("outfile.txt")
hello
world
Điều gì đơn giản writeLines()
?
txt <- "Hallo\nWorld"
writeLines(txt, "outfile.txt")
hoặc là
txt <- c("Hallo", "World")
writeLines(txt, "outfile.txt")
"Hallo\nWorld"
là một vectơ dài của loại ký tự. Chỉ cần thử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
Bạn có thể làm điều đó trong một tuyên bố
cat("hello","world",file="output.txt",sep="\n",append=TRUE)
Tôi đề nghị:
writeLines(c("Hello","World"), "output.txt")
Nó ngắn hơn và trực tiếp hơn câu trả lời được chấp nhận hiện tại. Không cần thiết phải làm:
fileConn<-file("output.txt")
# writeLines command using fileConn connection
close(fileConn)
Bởi vì tài liệu cho writeLines()
biết:
Nếu
con
là một chuỗi ký tự, hàm sẽ gọifile
để có được kết nối tệp được mở trong suốt thời gian của hàm gọi.
# default settings for writeLines(): sep = "\n", useBytes = FALSE
# so: sep = "" would join all together e.g.
phiên bản gọn gàng với ống và write_lines()
từ readr
library(tidyverse)
c('Hello', 'World') %>% write_lines( "output.txt")
Các cách ngắn để viết các dòng văn bản vào một tệp trong R có thể được nhận ra bằng cat hoặc writeLines như đã được hiển thị trong nhiều câu trả lời. Một số khả năng ngắn nhất có thể là:
cat("Hello\nWorld", file="output.txt")
writeLines("Hello\nWorld", "output.txt")
Trong trường hợp bạn không thích "\ n", bạn cũng có thể sử dụng kiểu sau:
cat("Hello
World", file="output.txt")
writeLines("Hello
World", "output.txt")
Trong khi writeLines thêm một dòng mới vào cuối tập tin, đây không phải là trường hợp của con mèo . Hành vi này có thể được điều chỉnh bởi:
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
Nhưng sự khác biệt chính là con mèo sử dụng các đối tượng R và writeLines một vectơ ký tự làm đối số. Vì vậy, viết ra, ví dụ, các số 1:10 cần được bỏ cho writeLines trong khi nó có thể được sử dụng như trên mèo:
cat(1:10)
writeLines(as.character(1:10))
Để làm tròn các khả năng, bạn có thể sử dụng writeLines()
với sink()
, nếu bạn muốn:
> sink("tempsink", type="output")
> writeLines("Hello\nWorld")
> sink()
> file.show("tempsink", delete.file=TRUE)
Hello
World
Đối với tôi, nó luôn có vẻ trực quan nhất để sử dụng print()
, nhưng nếu bạn làm điều đó thì đầu ra sẽ không như bạn muốn:
...
> print("Hello\nWorld")
...
[1] "Hello\nWorld"
Dựa trên câu trả lời tốt nhất :
file <- file("test.txt")
writeLines(yourObject, file)
close(file)
Lưu ý rằng yourObject
cần phải ở định dạng chuỗi; sử dụng as.character()
để chuyển đổi nếu bạn cần.
Nhưng điều này là quá nhiều gõ cho mỗi lần lưu. Hãy tạo một đoạn mã trong RStudio.
Trong Tùy chọn toàn cầu >> Mã >> Đoạn trích, nhập nội dung này:
snippet wfile
file <- file(${1:filename})
writeLines(${2:yourObject}, file)
close(file)
Sau đó, trong quá trình mã hóa, gõ wfile
và nhấnTab .
file <- file(...)
dòng trông đáng ngờ đối với tôi. Không phải cả hai đều gọi file
như là một chức năng và gán file
một ý nghĩa mới sao? Có file()
hoạt động ngay cả sau khi đoạn mã này chạy? Không có quyền truy cập vào bản cài đặt R để tự kiểm tra ngay bây giờ ...
Điều gì đơn giản write.table()
?
text = c("Hello", "World")
write.table(text, file = "output.txt", col.names = F, row.names = F, quote = F)
Các tham số col.names = FALSE
và row.names = FALSE
đảm bảo loại trừ các tên hàng và cột trong txt và tham số quote = FALSE
loại trừ các dấu ngoặc kép ở đầu và cuối của mỗi dòng trong txt. Để đọc dữ liệu trở lại, bạn có thể sử dụng text = readLines("output.txt")
.
Trong các phiên bản mới hơn của R, writeLines
sẽ giữ lại trả về và khoảng trắng trong văn bản của bạn, vì vậy bạn không cần đưa \n
vào cuối dòng và bạn có thể viết một đoạn văn bản lớn vào một tệp. Điều này sẽ làm việc với ví dụ,
txt <- "Hello
World"
fileConn<-file("output.txt")
writeLines(txt, fileConn)
close(fileConn)
Nhưng bạn cũng có thể sử dụng thiết lập này để chỉ bao gồm văn bản có cấu trúc (ngắt dòng hoặc thụt lề)
txt <- "Hello
world
I can
indent text!"
fileConn<-file("output.txt")
writeLines(txt, fileConn)
close(fileConn)