Tandai - bagaimana Jika saya memiliki beberapa utas yang semuanya ingin saya tambahkan baris ke file yang sama? (Masalahnya adalah bahwa Anda tidak dapat memiliki lebih dari satu koneksi ke file, Jika saya tidak salah) Terima kasih.
Tal Galili
8
@Tal, itu adalah pertanyaan yang sangat bagus, Anda harus mempostingnya sebagai pertanyaan baru yang terpisah sehingga akan mendapat perhatian. Ada jauh lebih banyak programmer R yang berpengetahuan luas di sini daripada saya!
Mark
8
Perhatikan bahwa ini membutuhkan file "output.txt" sudah ada. Jika tidak, harus dibuat terlebih dahulu, misalnya menggunakan 'file.create ("output.txt")'.
jhin
20
@ Jon Saya tidak yakin apakah itu benar. Menggunakan RStudio 0.98 dan R versi 3.1.0 file dibuat secara otomatis jika tidak ada
JHowIX
4
Opsi writeLines()kira-kira sepuluh kali lebih cepat daripada kombinasi dari sink()dancat()
sink () tidak berfungsi pada Databricks hati-hati. Anda dapat menggunakan meletakkan semua ini di dalam suatu fungsi dan memanggil fungsi ini seperti capture.output (funciton call, filename)
abdkumar
109
Saya akan menggunakan cat()perintah seperti dalam contoh ini:
Senang menunjukkan bahwa input tidak harus menjadi vektor garis
Tim
1
@tim Sebenarnya "Hallo\nWorld"adalah panjang satu vektor dari tipe karakter. Coba sajatxt <- "Hallo\nWorld"; is.character(txt) && length(txt) == 1 && is.vector(txt)
zero323
Ini hanya berfungsi untuk saya sebagai writeLines(txt, con="outfile.txt").
Palec
tidak, harus berfungsi tanpa penamaan argumen selama Anda memberikan nama file yang valid sebagai argumen kedua.
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:
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:
The file <- file(...)garis terlihat mencurigakan kepada saya. Bukankah itu keduanya memohon filesebagai fungsi dan menugaskan filemakna baru? Apakah file()bekerja bahkan setelah kode ini berjalan? Tidak memiliki akses ke instalasi R untuk menguji diri saya sekarang ...
Palec
itu berfungsi pada pengaturan saya @Palec Anda dapat mengubah file ke youFile jika Anda memiliki masalah dengan kata
Luis Martins
1
Opsi sistem yang jelek
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
Parameter col.names = FALSEdan row.names = FALSEpastikan untuk mengecualikan nama baris dan kolom di txt, dan parameter quote = FALSEtidak 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, writeLinesakan mempertahankan pengembalian dan spasi dalam teks Anda, sehingga Anda tidak perlu memasukkan \ndi akhir baris dan Anda dapat menulis satu potongan besar teks ke file. Ini akan berfungsi dengan contoh,
writeLines()
kira-kira sepuluh kali lebih cepat daripada kombinasi darisink()
dancat()
Sebenarnya Anda bisa melakukannya dengan
sink()
:maka lakukan:
sumber
Saya akan menggunakan
cat()
perintah seperti dalam contoh ini:Anda kemudian dapat melihat hasil dari dengan R dengan
sumber
Bagaimana dengan yang sederhana
writeLines()
?atau
sumber
"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
sumber
Saya menyarankan:
Itu lebih pendek dan lebih langsung daripada jawaban yang diterima saat ini. Tidak perlu melakukan:
Karena dokumentasi untuk
writeLines()
mengatakan:sumber
Edisi tidyverse dengan pipa dan
write_lines()
dari readrsumber
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:
Jika Anda tidak menyukai "\ n", Anda juga dapat menggunakan gaya berikut:
Sementara writeLines menambahkan baris baru di akhir file yang bukan kasus kucing . Perilaku ini dapat disesuaikan dengan:
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:
sumber
Untuk melengkapi kemungkinan, Anda dapat menggunakan
writeLines()
dengansink()
, jika Anda ingin:Bagi saya, sepertinya selalu paling intuitif untuk digunakan
print()
, tetapi jika Anda melakukannya, hasilnya tidak seperti yang Anda inginkan:sumber
Berdasarkan jawaban terbaik :
Perhatikan bahwa
yourObject
kebutuhan harus dalam format string; gunakanas.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:
Kemudian, selama coding, ketik
wfile
dan tekanTab .sumber
file <- file(...)
garis terlihat mencurigakan kepada saya. Bukankah itu keduanya memohonfile
sebagai fungsi dan menugaskanfile
makna baru? Apakahfile()
bekerja bahkan setelah kode ini berjalan? Tidak memiliki akses ke instalasi R untuk menguji diri saya sekarang ...Opsi sistem yang jelek
sumber
Bagaimana dengan yang sederhana
write.table()
?Parameter
col.names = FALSE
danrow.names = FALSE
pastikan untuk mengecualikan nama baris dan kolom di txt, dan parameterquote = FALSE
tidak termasuk tanda kutip di awal dan akhir setiap baris di txt. Untuk membaca kembali data, Anda dapat menggunakantext = readLines("output.txt")
.sumber
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,Tetapi Anda juga bisa menggunakan pengaturan ini untuk hanya memasukkan teks dengan struktur (linebreak atau indentasi)
sumber