Dalam bahasa scripting R, bagaimana cara menulis baris teks, misalnya dua baris berikut
Hello
World
ke file bernama "output.txt"?
Dalam bahasa scripting R, bagaimana cara menulis baris teks, misalnya dua baris berikut
Hello
World
ke file bernama "output.txt"?
Jawaban:
fileConn<-file("output.txt")
writeLines(c("Hello","World"), fileConn)
close(fileConn)
writeLines()
kira-kira sepuluh kali lebih cepat daripada kombinasi dari sink()
dancat()
Sebenarnya Anda bisa melakukannya dengan sink()
:
sink("outfile.txt")
cat("hello")
cat("\n")
cat("world")
sink()
maka lakukan:
file.show("outfile.txt")
# hello
# world
Saya akan menggunakan cat()
perintah seperti dalam contoh ini:
> cat("Hello",file="outfile.txt",sep="\n")
> cat("World",file="outfile.txt",append=TRUE)
Anda kemudian dapat melihat hasil dari dengan R dengan
> file.show("outfile.txt")
hello
world
Bagaimana dengan yang sederhana writeLines()
?
txt <- "Hallo\nWorld"
writeLines(txt, "outfile.txt")
atau
txt <- c("Hallo", "World")
writeLines(txt, "outfile.txt")
"Hallo\nWorld"
adalah panjang satu vektor dari tipe karakter. Coba sajatxt <- "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
Anda bisa melakukannya dalam satu pernyataan
cat("hello","world",file="output.txt",sep="\n",append=TRUE)
Saya menyarankan:
writeLines(c("Hello","World"), "output.txt")
Itu lebih pendek dan lebih langsung daripada jawaban yang diterima saat ini. Tidak perlu melakukan:
fileConn<-file("output.txt")
# writeLines command using fileConn connection
close(fileConn)
Karena dokumentasi untuk writeLines()
mengatakan:
Jika
con
string karakter, fungsi memanggilfile
untuk mendapatkan koneksi file yang dibuka selama durasi panggilan fungsi.
# default settings for writeLines(): sep = "\n", useBytes = FALSE
# so: sep = "" would join all together e.g.
Edisi tidyverse dengan pipa dan write_lines()
dari readr
library(tidyverse)
c('Hello', 'World') %>% write_lines( "output.txt")
Cara singkat untuk menulis baris teks ke file dalam R dapat diwujudkan dengan cat atau writeLines seperti yang telah ditunjukkan dalam banyak jawaban. Beberapa kemungkinan tersingkat adalah:
cat("Hello\nWorld", file="output.txt")
writeLines("Hello\nWorld", "output.txt")
Jika Anda tidak menyukai "\ n", Anda juga dapat menggunakan gaya berikut:
cat("Hello
World", file="output.txt")
writeLines("Hello
World", "output.txt")
Sementara writeLines menambahkan baris baru di akhir file yang bukan kasus kucing . Perilaku ini dapat disesuaikan dengan:
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
Tapi perbedaan utama adalah bahwa kucing menggunakan R objek dan writeLines sebuah vektor karakter sebagai argumen. Jadi menulis misalnya angka 1:10 perlu dicor untuk writeLines sementara itu dapat digunakan seperti pada kucing:
cat(1:10)
writeLines(as.character(1:10))
Untuk melengkapi kemungkinan, Anda dapat menggunakan writeLines()
dengan sink()
, jika Anda ingin:
> sink("tempsink", type="output")
> writeLines("Hello\nWorld")
> sink()
> file.show("tempsink", delete.file=TRUE)
Hello
World
Bagi saya, sepertinya selalu paling intuitif untuk digunakan print()
, tetapi jika Anda melakukannya, hasilnya tidak seperti yang Anda inginkan:
...
> print("Hello\nWorld")
...
[1] "Hello\nWorld"
Berdasarkan jawaban terbaik :
file <- file("test.txt")
writeLines(yourObject, file)
close(file)
Perhatikan bahwa yourObject
kebutuhan harus dalam format string; gunakan as.character()
untuk mengkonversi jika Anda perlu.
Tapi ini terlalu banyak mengetik untuk setiap upaya penyelamatan. Mari kita membuat snippet di RStudio.
Dalam Opsi Global >> Kode >> Cuplikan, ketikkan ini:
snippet wfile
file <- file(${1:filename})
writeLines(${2:yourObject}, file)
close(file)
Kemudian, selama coding, ketik wfile
dan tekanTab .
file <- file(...)
garis terlihat mencurigakan kepada saya. Bukankah itu keduanya memohon file
sebagai fungsi dan menugaskan file
makna baru? Apakah file()
bekerja bahkan setelah kode ini berjalan? Tidak memiliki akses ke instalasi R untuk menguji diri saya sekarang ...
Bagaimana dengan yang sederhana write.table()
?
text = c("Hello", "World")
write.table(text, file = "output.txt", col.names = F, row.names = F, quote = F)
Parameter col.names = FALSE
dan row.names = FALSE
pastikan untuk mengecualikan nama baris dan kolom di txt, dan parameter quote = FALSE
tidak termasuk tanda kutip di awal dan akhir setiap baris di txt. Untuk membaca kembali data, Anda dapat menggunakan text = readLines("output.txt")
.
Dalam versi R yang lebih baru, writeLines
akan mempertahankan pengembalian dan spasi dalam teks Anda, sehingga Anda tidak perlu memasukkan \n
di akhir baris dan Anda dapat menulis satu potongan besar teks ke file. Ini akan berfungsi dengan contoh,
txt <- "Hello
World"
fileConn<-file("output.txt")
writeLines(txt, fileConn)
close(fileConn)
Tetapi Anda juga bisa menggunakan pengaturan ini untuk hanya memasukkan teks dengan struktur (linebreak atau indentasi)
txt <- "Hello
world
I can
indent text!"
fileConn<-file("output.txt")
writeLines(txt, fileConn)
close(fileConn)