Bagaimana Anda mengimpor file teks biasa sebagai string karakter tunggal di R? Saya pikir ini mungkin akan memiliki jawaban yang sangat sederhana tetapi ketika saya mencoba ini hari ini saya menemukan bahwa saya tidak dapat menemukan fungsi untuk melakukan ini.
Sebagai contoh, misalkan saya memiliki file foo.txt
dengan sesuatu yang saya ingin textmine.
Saya mencobanya dengan:
scan("foo.txt", what="character", sep=NULL)
tetapi ini masih mengembalikan vektor. Saya membuatnya bekerja dengan:
paste(scan("foo.txt", what="character", sep=" "),collapse=" ")
tetapi itu adalah solusi yang jelek yang mungkin juga tidak stabil.
readr::read_file
Memecahkan masalah ini dengan baik sekarang.Jawaban:
Berikut adalah varian solusi dari @JoshuaUlrich yang menggunakan ukuran yang benar dan bukan ukuran yang dikodekan:
Perhatikan bahwa readChar mengalokasikan ruang untuk jumlah byte yang Anda tentukan, jadi
readChar(fileName, .Machine$integer.max)
tidak berfungsi dengan baik ...sumber
Jika ada yang masih melihat pertanyaan ini 3 tahun kemudian, paket readr Hadley Wickham memiliki
read_file()
fungsi praktis yang akan melakukan ini untuk Anda.sumber
readr
. Saya telah memperbarui jawabannya sesuai - saya harap Sharon tidak keberatan.could not find function "pase"
kode iniSaya akan menggunakan yang berikut ini. Ini seharusnya bekerja dengan baik, dan tidak terlihat jelek, setidaknya bagi saya:
sumber
collapse="\n"
untuk meniru fakta bahwa ini adalah baris yang terpisah pada file asli. Dengan perubahan ini, solusi ini akan bekerja untuk file terkompresi dan tidak terkompresi dengan baik.blocking=TRUE
default sehinggareadLines()
akan mengembalikan file lengkap hanya dengan peringatan tentang karakter EOL yang hilang. Namun, komentar @ gvrocha patut diperhatikan: pahami jenis koneksi Anda! ? readLines help saysIf the final line is incomplete (no final EOL marker) the behaviour depends on whether the connection is blocking or not. For a non-blocking text-mode connection the incomplete line is pushed back, silently. **For all other connections the line will be accepted, with a warning.**
Bagaimana tentang:
sumber
Paket readr memiliki fungsi untuk melakukan segalanya untuk Anda.
Ini menggantikan versi dalam string paket.
sumber
Sayang sekali bahwa solusi Sharon tidak dapat digunakan lagi. Saya telah menambahkan solusi Josh O'Brien dengan modifikasi asieira ke file .Rprofile saya:
dan menggunakannya seperti ini:
txt = read.text('path/to/my/file.txt')
. Saya tidak bisa meniru temuan bumpkin (28 Oktober 14), danwriteLines(txt)
menunjukkan isinyafile.txt
. Juga, setelahwrite(txt, '/tmp/out')
perintahdiff /tmp/out path/to/my/file.txt
melaporkan tidak ada perbedaan.sumber
readChar tidak memiliki banyak fleksibilitas sehingga saya menggabungkan solusi Anda (readLines dan paste)
Saya juga menambahkan spasi di antara setiap baris:
sumber
Sepertinya solusi Anda tidak terlalu jelek. Anda bisa menggunakan fungsi dan menjadikannya proffesional seperti cara-cara ini
sumber