Jika Anda memiliki Stata 13, Anda dapat memasukkannya ke sana dan menyimpannya sebagai format Stata 12 menggunakan perintah saveold (lihat bantuan saveold). Setelah itu, bawa ke R. Jika sudah, Stata 10-12, Anda bisa menggunakan penggunaan perintah yang ditulis pengguna13. (Oleh Sergiy Radyakin) untuk memuatnya dan menyimpannya di sana kemudian ke R. Anda dapat menginstal use13 running ssc install use13. Alternatif lain, masih dengan Stata, melibatkan mengekspor format Stata ke sesuatu yang lain yang akan dibaca oleh R, mis. File berbasis teks Lihat bantuan ekspor dalam Stata. Memulai Stata 14, saveold memiliki opsi versi (), yang memungkinkan seseorang untuk menyimpan dalam format Stata. dta setua Stata 11.R Data ImportExport R Data ImportExport 1 Pendahuluan Membaca data ke dalam sistem statistik untuk analisis dan mengekspor hasilnya ke yang lain. Sistem penulisan laporan bisa menjadi tugas frustasi yang bisa memakan waktu lebih lama daripada analisis statistik itu sendiri, meskipun kebanyakan pembaca akan menganggap yang terakhir ini jauh lebih menarik. Manual ini menjelaskan tentang fasilitas impor dan ekspor yang tersedia baik di R sendiri atau melalui paket yang tersedia dari CRAN atau di tempat lain. Kecuali dinyatakan lain, semua yang diuraikan dalam manual ini adalah (setidaknya pada prinsipnya) tersedia di semua platform yang sedang berjalan R. Secara umum, sistem statistik seperti R tidak begitu sesuai dengan manipulasi data berskala besar. Beberapa sistem lain lebih baik daripada R pada saat ini, dan bagian dari dorongan panduan ini adalah untuk menyarankan bahwa alih-alih melakukan duplikasi fungsi di R, kita dapat membuat sistem lain melakukan pekerjaan (Misalnya Therneau amp Grambsch (2000) berkomentar bahwa mereka lebih menyukai Lakukan manipulasi data di SAS dan kemudian gunakan survival paket di S untuk analisisnya.) Sistem manipulasi basis data seringkali sangat sesuai untuk memanipulasi dan mengekstrak data: beberapa paket untuk berinteraksi dengan DBMS dibahas di sini. Ada paket untuk memungkinkan fungsionalitas dikembangkan dalam bahasa seperti Java. Perl dan python untuk langsung terintegrasi dengan kode R, membuat penggunaan fasilitas dalam bahasa ini pun lebih tepat. (Lihat paket rJava dari CRAN dan SJava RSPerl dan paket RSPython dari proyek Omegahat, omegahat) Perlu diingat bahwa R seperti S berasal dari tradisi Unix dari alat-alat kecil yang dapat digunakan kembali, dan ini bisa bermanfaat bagi Gunakan alat seperti awk dan perl untuk memanipulasi data sebelum impor atau setelah ekspor. Studi kasus di Becker, Chambers amp Wilks (1988, Bab 9) adalah contoh dari hal ini, di mana alat Unix digunakan untuk memeriksa dan memanipulasi data sebelum masuk ke S. Alat-alat Unix tradisional sekarang jauh lebih banyak tersedia, termasuk untuk Windows. Manual ini pertama kali ditulis pada tahun 2000, dan jumlah cakupan paket R telah meningkat seratus kali lipat. Untuk format data khusus, layak dicari untuk melihat apakah paket yang sesuai sudah ada. 1.1.1 Pengkodean Kecuali file yang akan diimpor seluruhnya dari ASCII. Biasanya perlu diketahui bagaimana pengodeannya. Untuk file teks, cara yang baik untuk mengetahui sesuatu tentang strukturnya adalah file command-line tool (untuk Windows, termasuk dalam Rtools). Ini melaporkan sesuatu seperti sistem mirip Unix Modern, termasuk macOS, cenderung menghasilkan file UTF-8. Windows dapat menghasilkan file lsquoUnicodersquo (UCS-2LE atau mungkin saja UTF-16LE 1). Jika tidak, sebagian besar file akan berada dalam pengkodean 8-bit kecuali dari lokasi bahasa ChinaJepang Korea (yang memiliki berbagai jenis pengkodean yang umum digunakan). Tidak mungkin untuk secara otomatis mendeteksi dengan pasti pengkodean 8-bit (walaupun tebakannya mungkin terjadi dan file mungkin menebak seperti pada contoh di atas), jadi Anda mungkin perlu meminta pencetus beberapa petunjuk (misalnya lsquoRussian pada Windowsrsquo ). LsquoBOMsrsquo (Byte Order Marks, en. wikipedia. orgwikiByteordermark) menyebabkan masalah pada file Unicode. Di dunia Unix BOM jarang digunakan, sedangkan di dunia Windows hampir selalu ada untuk file UCS-2UTF-16, dan sering digunakan untuk file UTF-8. Utilitas file bahkan tidak akan mengenali file UCS-2 tanpa BOM, namun banyak utilitas lainnya akan menolak untuk membaca file dengan BOM dan standar IANA untuk UTF-16LE dan UTF-16BE melarangnya. Kita terlalu sering diremehkan untuk melihat file dengan utilitas baris perintah atau editor hex untuk menyelesaikan pengkodeannya. Perhatikan bahwa utf8 bukan nama pengkodean yang valid (UTF-8), dan macintosh adalah nama yang paling portabel untuk apa yang kadang-kadang disebut pengkodean lsquoMac Romanrsquo. 1.2 Ekspor ke file teks Mengekspor hasil dari R biasanya merupakan tugas yang tidak terlalu diperdebatkan, namun masih ada sejumlah perangkap. Akan ada aplikasi target dalam pikiran, dan seringkali file teks akan menjadi kendaraan pertukaran yang paling nyaman. (Jika file biner diperlukan, lihat file biner.) Fungsi cat mendasari fungsi untuk mengekspor data. Dibutuhkan sebuah argumen file, dan argumen tambahan memungkinkan sebuah file teks ditulis melalui seruan berturut-turut ke kucing. Lebih baik, terutama jika ini harus dilakukan berkali-kali, adalah membuka koneksi file untuk menulis atau menambahkan, dan kucing untuk koneksi itu, lalu tutup. Tugas yang paling umum adalah menulis matriks atau bingkai data ke file sebagai kotak angka empat persegi panjang, mungkin dengan label baris dan kolom. Hal ini bisa dilakukan dengan fungsi write. table dan write. Fungsi menulis hanya menulis matriks atau vektor dalam jumlah kolom tertentu (dan mentranspos matriks). Fungsi write. table lebih nyaman, dan menulis sebuah bingkai data (atau objek yang dapat dipaksakan pada bingkai data) dengan label baris dan kolom. Ada sejumlah masalah yang perlu dipertimbangkan dalam menuliskan bingkai data ke file teks. Sebagian besar konversi bilangan realkompleks yang dilakukan oleh fungsi ini adalah presisi penuh, namun dengan menulis diatur oleh pengaturan opsi (digit) saat ini. Untuk kontrol lebih, gunakan format pada bingkai data, mungkin kolom demi kolom. R lebih suka header baris untuk tidak memiliki entri untuk nama baris, jadi file tersebut terlihat seperti Beberapa sistem lain memerlukan entri (mungkin kosong) untuk nama baris, yang merupakan write. table apa yang akan diberikan jika argumen col. names NA dispesifikasikan . Excel adalah salah satu sistem seperti itu. Pemisah lapangan yang umum digunakan dalam file adalah koma, karena sepertinya tidak mungkin muncul di salah satu bidang di negara-negara berbahasa Inggris. File seperti itu dikenal sebagai file CSV (comma separated values), dan fungsi wrapper write. csv menyediakan default yang sesuai. Di beberapa locales koma digunakan sebagai titik desimal (set this in write. table by dec quot, quot) dan ada file CSV yang menggunakan titik koma sebagai pemisah bidang: gunakan write. csv2 untuk default yang sesuai. Ada standar IETF untuk file CSV (yang mengamanatkan koma dan akhiran garis CRLF, yang menggunakan eol quotrnquot), RFC4180 (lihat tools. ietf. orghtmlrfc4180), namun yang lebih penting dalam praktiknya adalah file tersebut dapat dibaca oleh aplikasi. Itu ditargetkan pada. Menggunakan titik koma atau tab (sep quottquot) mungkin adalah pilihan teraman. Secara default nilai yang hilang adalah output sebagai NA. Tapi ini bisa diubah oleh argumen na. Perhatikan bahwa NaN diperlakukan sebagai NA oleh write. table. Tapi tidak dengan kucing atau menulis. Secara default string dikutip (termasuk nama baris dan kolom). Argumen kutipan kontrol jika karakter dan variabel faktor dikutip: beberapa program, misalnya Mondrian (en. wikipedia. orgwikiMondrian (perangkat lunak) tidak menerima string yang dikutip Beberapa perawatan diperlukan jika senar berisi tanda petik tertanam Tiga bentuk yang berguna adalah yang kedua Adalah bentuk pelarian yang biasa digunakan oleh spreadsheet File teks tidak mengandung metadata pada pengkodeannya, jadi untuk data non-ASCII, file tersebut perlu ditargetkan ke aplikasi yang dimaksudkan untuk membacanya. Semua fungsi ini dapat menulis ke koneksi yang Memungkinkan pengkodean yang akan ditentukan untuk file tersebut, dan write. table memiliki argumen fileEncoding untuk mempermudahnya. Bagian yang sulit adalah untuk mengetahui encoding file apa yang akan digunakan. Untuk digunakan pada Windows, yang terbaik adalah menggunakan Windows yang dipanggil lsquoUnicodersquo 2 Menggunakan UTF-8 adalah cara yang baik untuk membuat file portabel yang tidak mudah dikelirukan dengan pengkodean lainnya, namun aplikasi macOS (di mana UTF-8 adalah pengkodean sistem) mungkin tidak mengenali mereka, dan Menang Aplikasi dows sangat tidak mungkin. Rupanya Excel: mac 20048 file. csv yang diharapkan dalam pengkodean quotmacromanquot (pengkodean yang digunakan pada versi Mac OS sebelumnya). Fungsi write. matrix dalam paket MASS menyediakan antarmuka khusus untuk menulis matrik, dengan pilihan untuk menuliskannya di blok dan dengan demikian mengurangi penggunaan memori. Hal ini dimungkinkan untuk menggunakan wastafel untuk mengalihkan output R standar ke file, dan dengan demikian menangkap output dari pernyataan cetak (mungkin implisit). Ini biasanya bukan rute yang paling efisien, dan pilihan (width) setting mungkin perlu ditingkatkan. Fungsi write. foreign dalam paket asing menggunakan write. table untuk menghasilkan file teks dan juga menulis file kode yang akan membaca file teks ini ke dalam paket statistik lain. Saat ini ada dukungan untuk ekspor ke SAS. SPSS dan Stata. Saat membaca data dari file teks, adalah tanggung jawab pengguna untuk mengetahui dan menentukan konvensi yang digunakan untuk membuat file tersebut, mis. Karakter komentar, apakah ada garis header, pemisah nilai, representasi untuk nilai yang hilang (dan sebagainya) yang dijelaskan dalam Export to text files. Bahasa markup yang dapat digunakan untuk menggambarkan tidak hanya konten tetapi juga struktur konten dapat membuat file yang dideskripsikan sendiri, sehingga orang tidak perlu memberikan rincian ini ke perangkat lunak untuk membaca data. Bahasa Markup eXtensible ndash lebih dikenal hanya sebagai XML ndash dapat digunakan untuk menyediakan struktur seperti itu, tidak hanya untuk kumpulan data standar namun juga struktur data yang lebih kompleks. XML menjadi sangat populer dan muncul sebagai standar untuk markup data umum dan pertukaran. Ini digunakan oleh komunitas yang berbeda untuk menggambarkan data geografis seperti peta, display grafis, matematika dan sebagainya. XML menyediakan cara untuk menentukan pengkodean filersquos, mis. Meski tidak membutuhkannya. Paket XML menyediakan fasilitas umum untuk membaca dan menulis dokumen XML dalam R. Package StatDataML on CRAN adalah salah satu contoh bangunan pada XML. Antarmuka lain ke perpustakaan libxml2 C disediakan oleh paket xml2. Yaml adalah sistem lain untuk penataan data teks, dengan penekanan pada keterbacaan manusia: didukung oleh paket yaml. 2 Data seperti Spreadsheet Dalam Ekspor ke file teks kita melihat sejumlah variasi pada format file teks seperti spreadsheet, di mana data disajikan dalam kotak persegi panjang, mungkin dengan label baris dan kolom. Pada bagian ini kita mempertimbangkan untuk mengimpor file-file seperti itu ke dalam R. 2.1 Variasi pada read. table Fungsi read. table adalah cara yang paling mudah dibaca dalam kumpulan data persegi panjang. Karena banyaknya kemungkinan, ada beberapa fungsi lain yang memanggil read. table tapi mengubah sekelompok argumen default. Hati-hati bahwa read. table adalah cara yang tidak efisien untuk membaca dalam matriks numerik yang sangat besar: lihat scan di bawah ini. Beberapa masalah yang perlu dipertimbangkan adalah: Jika file berisi bidang karakter non-ASCII, pastikan dibaca dalam pengkodean yang benar. Ini terutama merupakan masalah untuk membaca file Latin-1 di lokasi UTF-8, yang dapat dilakukan dengan sesuatu seperti Perhatikan bahwa ini akan bekerja di lokasi manapun yang dapat mewakili string Latin-1, namun tidak banyak lokasi Hellip lokal berbahasa Yunani. Sebaiknya tentukan argumen header secara eksplisit, Secara konvensional, baris tajuk hanya memiliki entri untuk kolom dan bukan untuk label baris, jadi satu bidang lebih pendek dari baris yang tersisa. (Jika R melihat ini, itu menyetel header TRUE.) Jika disajikan dengan file yang memiliki field header (mungkin kosong) untuk label baris, bacalah dengan sesuatu seperti nama Kolom dapat diberikan secara eksplisit melalui nama eksplisit col. names Timpa baris header (jika ada). Biasanya melihat file akan menentukan pemisah lapangan yang akan digunakan, namun dengan file terpisah dari spasi putih mungkin ada pilihan antara kuota kuota standar yang menggunakan spasi putih (spasi, tab atau baris baru) sebagai pemisah, sep quot quot quot Dan sep quottquot. Perhatikan bahwa pilihan pemisah mempengaruhi masukan dari string yang dikutip. Jika Anda memiliki file dengan tab-delimited yang berisi field kosong pastikan untuk menggunakan sep quottquot. Secara default, string karakter dapat dikutip oleh lsquo quot rsquo atau lsquo rsquo, dan dalam setiap kasus semua karakter sampai kutipan yang cocok diambil sebagai bagian dari string karakter. Kumpulan karakter kutipan yang valid (yang mungkin tidak ada) dikontrol oleh argumen kutipan. Untuk sep quotnquot default diubah menjadi quote quotquot. Jika tidak ada karakter pemisah yang ditentukan, tanda kutip dapat lolos dalam string yang dikutip dengan segera sebelum mereka melakukannya dengan gaya C-C. Jika karakter pemisah ditentukan, tanda kutip dapat diloloskan dengan senar yang dikutip dengan menggandakannya seperti pada spreadsheet konvensional. Misalnya ini tidak bekerja dengan pemisah default. Secara default file tersebut diasumsikan mengandung karakter string NA untuk mewakili nilai yang hilang, namun hal ini dapat diubah oleh argumen na. strings. Yang merupakan vektor dari satu atau lebih representasi karakter dari nilai yang hilang. Bidang kosong dalam kolom numerik juga dianggap sebagai nilai yang hilang. Pada kolom numerik, nilai NaN. Inf dan - Inf diterima. Hal ini sangat umum untuk file yang diekspor dari spreadsheet agar semua bidang kosong yang tertinggal (dan pemisahnya) diabaikan. Untuk membaca file tersebut set isikan TRUE. Ruang putih dalam bidang karakter Jika pemisah ditentukan, mengarah dan mengikuti area putih di bidang karakter dianggap sebagai bagian dari bidang. Untuk strip ruang, gunakan argumen strip. white TRUE. Secara default, read. table mengabaikan baris kosong. Ini bisa diubah dengan setting blank. lines. skip FALSE. Yang hanya akan berguna bersamaan dengan mengisi TRUE. Mungkin untuk menggunakan baris kosong untuk menunjukkan kasus yang hilang dalam tata letak biasa. Kecuali Anda melakukan tindakan khusus, read. table membaca semua kolom sebagai vektor karakter dan kemudian mencoba memilih kelas yang sesuai untuk setiap variabel dalam bingkai data. Ini mencoba pada gilirannya logis. bilangan bulat. Numerik dan kompleks. Pindah jika ada entri yang tidak hilang dan tidak dapat dikonversi 3 Jika semua ini gagal, variabel diubah menjadi faktor. Argumen colClasses dan as. is memberikan kontrol lebih besar. Menentukan as. is TRUE menekan konversi vektor karakter menjadi faktor (hanya). Menggunakan colClasses memungkinkan kelas yang diinginkan diatur untuk setiap kolom pada input: akan lebih cepat dan menggunakan sedikit memori. Perhatikan bahwa colClasses dan as. is ditentukan per kolom, bukan per variabel, jadi sertakan kolom nama baris (jika ada). Secara default, read. table menggunakan lsquo rsquo sebagai karakter komentar, dan jika ini ditemukan (kecuali dalam string yang dikutip), sisa baris diabaikan. Baris yang hanya berisi spasi putih dan komentar diperlakukan sebagai garis kosong. Jika sudah diketahui bahwa tidak akan ada komentar di file data, itu lebih aman (dan mungkin lebih cepat) untuk menggunakan comment. char quotquot. Banyak OS memiliki konvensi untuk menggunakan garis miring terbalik sebagai karakter pelarian dalam file teks, namun Windows tidak (dan menggunakan backslash pada nama path). Ini adalah opsional di R apakah konvensi semacam itu diterapkan pada file data. Baik read. table dan scan memiliki argumen logis allowEscapes. Ini salah secara default, dan garis miring terbalik kemudian hanya ditafsirkan sebagai (dalam keadaan yang dijelaskan di atas) lolos dari penawaran. Jika ini benar, pelepasan gaya C ditafsirkan, yaitu karakter kontrol a, b, f, n, r, t, v dan oktal dan heksadesimal seperti 040 dan 0x2A. Karakter lolos lainnya diperlakukan seperti sendirinya, termasuk garis miring terbalik. Perhatikan bahwa Unicode lolos seperti u xxxx tidak pernah ditafsirkan. Ini dapat ditentukan oleh argumen fileEncoding, misalnya Jika Anda tahu (benar) pengkodean filersquos ini akan hampir selalu bekerja. Namun, kita tahu satu pengecualian, file UTF-8 dengan BOM. Beberapa orang mengklaim bahwa file UTF-8 tidak boleh memiliki BOM, namun beberapa perangkat lunak (tampaknya termasuk Excel: mac) menggunakannya, dan banyak OS mirip Unix tidak menerimanya. Jadi dihadapkan dengan file yang file laporan seperti yang dapat dibaca pada Windows oleh tapi di Unix-sama mungkin perlu (Ini kemungkinan besar akan bekerja tanpa menentukan pengkodean di lokal UTF-8). Fungsi Kenyamanan dibaca. csv dan baca. Delim memberikan argumen untuk read. table yang sesuai untuk file CSV dan tab-delimited yang diekspor dari spreadsheet di tempat berbahasa Inggris. Variasi read. csv2 dan read. delim2 sesuai untuk digunakan di tempat dimana koma digunakan untuk titik desimal dan (untuk read. csv2) untuk spreadsheet yang menggunakan titik koma untuk memisahkan bidang. Jika pilihan untuk read. table tidak benar, pesan kesalahan biasanya akan berupa formulir. Ini mungkin memberikan informasi yang cukup untuk menemukan masalahnya, namun fungsi tambahan count. fields dapat berguna untuk diselidiki lebih lanjut. Efisiensi bisa menjadi penting saat membaca grid data yang besar. Ini akan membantu untuk menentukan comment. char quotquot. ColClasses sebagai salah satu jenis vektor atom (logis, integer, numerik, kompleks, karakter atau mungkin mentah) untuk setiap kolom, dan memberi nrows. Jumlah baris yang akan dibaca (dan perkiraan terlalu tinggi lebih baik daripada tidak menentukan hal ini sama sekali). Lihat contoh di bagian selanjutnya. 2.2 File format lebar tetap Terkadang file data tidak memiliki pembatas lapangan namun memiliki bidang pada kolom yang telah ditentukan sebelumnya. Ini sangat umum terjadi pada hari-hari kartu berlubang, dan terkadang masih digunakan untuk menyimpan ruang file. Fungsi read. fwf menyediakan cara sederhana untuk membaca file seperti itu, menentukan vektor lebar bidang. Fungsi membaca file ke memori sebagai keseluruhan baris, membagi string karakter yang dihasilkan, menulis sebuah file terpisah sementara dan kemudian memanggil read. table. Ini cukup untuk file kecil, tapi untuk hal yang lebih rumit sebaiknya menggunakan fasilitas bahasa seperti perl untuk melakukan pra-proses file. Fungsi read. fortran adalah fungsi yang sama untuk file format tetap, dengan menggunakan spesifikasi kolom bergaya Fortran. 2.3 Format Interchange Data (DIF) Format lama yang terkadang digunakan untuk data mirip spreadsheet adalah format DIF, atau Data Interchange. Fungsi read. DIF menyediakan cara sederhana untuk membaca file tersebut. Dibutuhkan argumen yang mirip dengan read. table untuk menugaskan jenis ke masing-masing kolom. Pada Windows, program spreadsheet sering menyimpan data spreadsheet yang disalin ke clipboard dalam format ini read. DIF (quotclipboardquot) bisa membacanya dari sana secara langsung. Ini sedikit lebih kuat daripada read. table (quotclipboardquot) dalam menangani spreadsheet dengan sel kosong. 2.4 Menggunakan scan secara langsung Kedua read. table dan read. fwf menggunakan scan untuk membaca file, lalu proses hasil scan. Mereka sangat nyaman, tapi terkadang lebih baik menggunakan scan secara langsung. Fungsi scan memiliki banyak argumen, yang sebagian besar sudah kita bahas di bawah read. table. Argumen yang paling penting adalah apa. Yang menentukan daftar mode variabel yang akan dibaca dari file. Jika daftar diberi nama, nama tersebut digunakan untuk komponen daftar yang dikembalikan. Mode bisa berupa numerik, karakter atau kompleks, dan biasanya ditentukan oleh sebuah contoh, mis. 0. kuotot atau 0i. Misalnya mengembalikan daftar dengan tiga komponen dan membuang kolom keempat dalam file. Ada fungsi readLines yang akan lebih mudah jika yang Anda inginkan adalah membaca keseluruhan baris ke R untuk diproses lebih lanjut. Salah satu penggunaan scan yang umum adalah membaca dalam matriks besar. Misalkan file matrix. dat hanya berisi angka untuk matriks 200 x 2000. Kemudian kita bisa menggunakan On one test ini memakan waktu 1 detik (di Linux, 3 detik di bawah Windows pada mesin yang sama) sedangkan butuh waktu 10 detik (dan lebih banyak memori), dan butuh waktu 7 detik. Perbedaannya hampir seluruhnya karena overhead membaca 2000 kolom pendek yang terpisah: apakah panjangnya 2000, pemindaian memakan waktu 9 detik sedangkan read. table mengambil 18 jika digunakan secara efisien (khususnya, menentukan colclasses) dan 125 jika digunakan secara naif. Perhatikan bahwa timing dapat bergantung pada tipe baca dan data. Pertimbangkan untuk membaca sejuta bilangan bulat yang berbeda: dan sejuta contoh seperangkat kode kecil: Perhatikan bahwa timing ini sangat bergantung pada sistem operasi (baca dasar di Windows setidaknya dua kali lipat dari waktu Linux ini) dan tepat Keadaan pengumpul sampah 2.5 Membentuk kembali data Terkadang data spreadsheet dalam format kompak yang memberi kovariat untuk setiap subjek diikuti oleh semua pengamatan pada subjek itu. Fungsi pemodelan Rrsquos memerlukan pengamatan dalam satu kolom. Perhatikan contoh data berikut dari pengukuran otak MRI berulang Ada dua kovariat dan sampai empat pengukuran pada masing-masing subjek. Data diekspor dari Excel sebagai file mr. csv. Kita bisa menggunakan stack untuk membantu memanipulasi data ini untuk memberikan satu respon. Fungsi unstack masuk ke arah yang berlawanan, dan mungkin berguna untuk mengekspor data. Cara lain untuk melakukannya adalah dengan menggunakan fungsi reshape. Oleh Fungsi reshape memiliki sintaks yang lebih rumit daripada stack tetapi dapat digunakan untuk data dimana bentuk lsquolongrsquo memiliki lebih dari satu kolom dalam contoh ini. Dengan directionquotwidequot. Membentuk kembali juga bisa melakukan transformasi yang berlawanan. 2.6 Tabel kontingensi datar Menampilkan tabel kontingensi dengan dimensi lebih tinggi dalam bentuk array biasanya agak merepotkan. Dalam analisis data kategoris, informasi semacam itu sering diwakili dalam bentuk array dua dimensi berbatasan dengan baris dan kolom terdepan yang menentukan kombinasi tingkat faktor yang sesuai dengan jumlah sel. Baris dan kolom ini biasanya dilipat dalam arti bahwa label hanya ditampilkan saat mereka berubah, dengan konvensi yang jelas bahwa baris dibaca dari atas ke bawah dan kolom dibaca dari kiri ke kanan. Dalam R, tabel kontingensi ldquoflatrdquo semacam itu dapat dibuat dengan menggunakan ftable. Yang menciptakan objek kelas quotftablequot dengan metode cetak yang sesuai. Sebagai contoh sederhana, perhatikan data standar R yang ditetapkan UCBAdmissions yang merupakan tabel kontingensi 3 dimensi yang dihasilkan dari mengklasifikasikan pelamar ke sekolah pascasarjana di UC Berkeley untuk enam departemen terbesar pada tahun 1973 yang diklasifikasikan berdasarkan penerimaan dan jenis kelamin. Representasi yang dicetak jelas lebih berguna daripada menampilkan data sebagai array 3 dimensi. Ada juga fungsi read. ftable untuk membaca tabel kontingensi seperti flat dari file. Ini memiliki argumen tambahan untuk menangani varian tentang bagaimana sebenarnya informasi tentang variabel dan tingkat variabel baris dan kolom terwakili. Halaman bantuan untuk read. ftable memiliki beberapa contoh yang berguna. Tabel datar dapat dikonversi ke tabel kontingensi standar dalam bentuk array dengan menggunakan as. table. Perhatikan bahwa tabel datar dicirikan oleh tampilan label baris (dan mungkin juga kolom) baris ldquoraggedrdquo mereka. Jika grid penuh dari tingkat variabel baris diberikan, seseorang sebaiknya menggunakan read. table untuk membaca data, dan membuat tabel kontingensi dari penggunaan xtabs ini. 3 Mengimpor dari sistem statistik lainnya Dalam bab ini, kita mempertimbangkan masalah membaca file data biner yang ditulis oleh sistem statistik lain. Hal ini sering dihindari, tapi mungkin tidak dapat dihindari jika sistem yang berasal tidak tersedia. Dalam semua kasus, fasilitas yang dijelaskan ditulis untuk file data dari versi spesifik sistem lain (seringkali di awal tahun 2000an), dan belum tentu diperbarui untuk versi terbaru dari sistem yang lain. 3.1 Paket EpiInfo, Minitab, S-PLUS, SAS, SPSS, Stata, Systat Paket yang direkomendasikan asing menyediakan fasilitas impor untuk file yang diproduksi oleh sistem statistik ini, dan untuk diekspor ke Stata. Dalam beberapa kasus, fungsi ini mungkin memerlukan memori yang jauh lebih sedikit daripada yang bisa dibaca. Write. foreign (Lihat Ekspor ke file teks) menyediakan mekanisme ekspor dengan dukungan SAS saat ini. SPSS dan Stata. Versi EpiInfo 5 dan 6 menyimpan data dalam format teks fixed-width yang menggambarkan dirinya sendiri. Read. epiinfo akan membaca file REC ini ke dalam bingkai data R. EpiData juga menghasilkan data dalam format ini. Fungsi read. mtp mengimpor lsquoMinitab Portable Worksheetrsquo. Ini akan mengembalikan komponen lembar kerja sebagai daftar R. Fungsi read. xport membaca sebuah file dalam format SAS Transport (XPORT) dan mengembalikan daftar frame data. Jika SAS tersedia di sistem Anda, fungsi read. ssd dapat digunakan untuk membuat dan menjalankan skrip SAS yang menyimpan dataset permanen SAS (.ssd atau. sas7bdat) dalam format Transport. Kemudian panggilan read. xport untuk membaca file yang dihasilkan. (Paket Hmisc memiliki fungsi sas. get yang serupa, juga menjalankan SAS.) Bagi mereka yang tidak memiliki akses ke SAS namun berjalan di Windows, SAS System Viewer (unduhan tanpa biaya) dapat digunakan untuk membuka kumpulan data SAS dan mengekspornya ke mis. Format csv Fungsi read. S yang dapat membaca objek biner yang dihasilkan oleh S-PLUS 3.x, 4.x atau 2000 on (32-bit) Unix atau Windows (dan dapat membacanya di OS yang berbeda). Ini bisa membaca banyak tapi tidak semua objek S: khususnya bisa membaca vektor, matriks dan frame data dan daftar yang berisi itu. Function data. restore membaca S-PLUS data dumps (dibuat oleh data. dump) dengan batasan yang sama (kecuali bahwa dump dari platform Alpha juga bisa dibaca). Seharusnya bisa membaca data dump dari S-PLUS 5.x dan kemudian ditulis dengan data. dump (oldStyleT). Jika Anda memiliki akses ke S-PLUS, biasanya lebih dapat diandalkan untuk membuang objek di S-PLUS dan mencari file dump di R. Untuk S-PLUS 5.x dan kemudian Anda mungkin perlu menggunakan dump (. OldStyleT). Dan untuk membaca dalam objek yang sangat besar mungkin lebih baik menggunakan file dump sebagai skrip batch daripada menggunakan fungsi sumber. Fungsi read. spss dapat membaca file yang dibuat oleh perintah lsquosaversquo dan lsquoexportrsquo di SPSS. Ini mengembalikan daftar dengan satu komponen untuk setiap variabel dalam kumpulan data yang tersimpan. Variabel SPSS dengan label nilai secara opsional dikonversi menjadi faktor R. SPSS Data Entry adalah aplikasi untuk membuat form data entry. Secara default itu membuat file data dengan informasi pemformatan ekstra yang dibaca. spss tidak dapat menangani, namun memungkinkan untuk mengekspor data dalam format SPSS biasa. Beberapa aplikasi pihak ketiga mengklaim untuk memproduksi data dengan format SPSS tetapi dengan perbedaan format: read. spss mungkin atau mungkin tidak dapat menangani hal ini. File stata. dta adalah format file biner. File dari versi 5 sampai 12 dari Stata dapat dibaca dan ditulis oleh fungsi read. dta dan write. dta. Variabel stata dengan label nilai secara opsional dikonversi ke (dan dari) faktor R. Untuk versi Stata 13 dan kemudian lihat paket CRAN bacastata13 dan haven. Read. systat membaca file Systat SAVE yang merupakan file data persegi panjang (mtype 1) yang ditulis pada mesin little-endian (seperti dari Windows). Ini memiliki ekstensi. sys atau (baru-baru ini).syd. 3.2 Octave Octave adalah sistem aljabar linier numerik (octave. org), dan fungsi read. octave dalam paket asing dapat dibaca dalam file dalam format data teks Octave yang dibuat dengan menggunakan perintah Octave save - ascii. Dengan dukungan untuk sebagian besar jenis variabel yang umum, termasuk skalar standar, matrik, dan N - d standar, skalar, string, dan boolean skalar dan matrik matematika dan matriks rekursif (struct, sel, dan daftar). . 4 Relational database 4.1 Mengapa menggunakan database Ada keterbatasan pada jenis data yang ditangani R dengan baik. Karena semua data yang dimanipulasi oleh R berada dalam memori, dan beberapa salinan data dapat dibuat selama pelaksanaan suatu fungsi, R tidak sesuai dengan kumpulan data yang sangat besar. Objek data yang berukuran lebih dari satu (beberapa) ratus megabyte dalam ukuran dapat menyebabkan R kehabisan memori, terutama pada sistem operasi 32-bit. R tidak dengan mudah mendukung akses data secara bersamaan. Artinya, jika lebih dari satu pengguna mengakses, dan mungkin mengupdate, data yang sama, perubahan yang dilakukan oleh satu pengguna tidak akan terlihat oleh yang lain. R mendukung persistensi data, karena Anda dapat menyimpan objek data atau keseluruhan lembar kerja dari satu sesi dan mengembalikannya pada sesi berikutnya, namun format data yang tersimpan khusus untuk R dan tidak mudah dimanipulasi oleh sistem lain. Sistem manajemen basis data (DBMS) dan, khususnya, DBMS relasional (RDBMS) dirancang untuk melakukan semua hal ini dengan baik. Kekuatan mereka adalah Untuk menyediakan akses cepat ke beberapa bagian database besar. Cara yang ampuh untuk merangkum dan menjembatani kolom di database. Simpan data dengan cara yang lebih teratur daripada model grid persegi empat dari spreadsheet dan bingkai data R. Akses serentak dari beberapa klien yang berjalan di beberapa host sekaligus menerapkan batasan keamanan pada akses ke data. Kemampuan untuk bertindak sebagai server untuk berbagai macam klien. Jenis aplikasi statistik dimana DBMS dapat digunakan adalah mengekstrak 10 sampel data, untuk mensubulasikan silang data untuk menghasilkan tabel kontingensi multi dimensi, dan untuk mengekstrak kelompok data berdasarkan kelompok dari database untuk analisis terpisah. Semakin banyak OS sendiri menggunakan DBMS karena alasan ini, jadi saat ini kemungkinan besar seseorang sudah terinstal di OS (non-Windows) Anda. Akonadi digunakan oleh KDE4 untuk menyimpan informasi pribadi. Beberapa aplikasi macos, termasuk Mail and Address Book, menggunakan SQLite. 4.2 Ikhtisar RDBMS Secara tradisional ada RDBMS komersial yang besar (dan mahal) (Informix Oracle Sybase IBMrsquos DB2 Microsoft SQL Server di Windows) dan database sistem dan kecil (seperti MySQL 4. PostgreSQL, Microsoft Access, hellip), yang pertama Ditandai dengan penekanan yang jauh lebih besar pada fitur keamanan data. Barisnya kabur, dengan MySQL dan PostgreSQL memiliki lebih banyak fitur high-end, dan versi lsquoexpressrsquo gratis tersedia untuk DBMS komersial. Ada sumber data lain yang umum digunakan, termasuk spreadsheet, database non-relasional dan bahkan file teks (mungkin dikompres). Open Database Connectivity (ODBC) adalah standar untuk menggunakan semua sumber data ini. Ini berasal dari Windows (lihat msdn. microsoften-uslibraryms71025228vvs.8529.aspx) namun juga diterapkan di LinuxUnixmacOS. Semua paket yang dijelaskan nanti di bab ini menyediakan klien ke database clienterver. Basis data dapat berada pada mesin yang sama atau (lebih sering) dari jarak jauh. Ada standar ISO (sebenarnya beberapa: SQL 92 adalah ISO IEC 9075, juga dikenal sebagai ANSI X3.135-1992, dan SQL 99 mulai digunakan) untuk bahasa antarmuka yang disebut SQL (Structured Query Language, kadang-kadang diucapkan lsquosequelrsquo: Lihat Bowman et al 1996 dan Kline dan Kline 2001) dimana DBMS ini mendukung berbagai tingkat. 4.2.1 Query SQL Antarmuka R yang lebih komprehensif menghasilkan SQL di belakang layar untuk operasi umum, namun penggunaan SQL secara langsung diperlukan untuk operasi yang kompleks. SQL konvensional ditulis dalam huruf besar, namun banyak pengguna akan merasa lebih nyaman menggunakan huruf kecil pada fungsi antarmuka R. DBMS relasional menyimpan data sebagai database tabel (atau relasi) yang agak mirip dengan frame data R, karena kolom tersebut terdiri dari kolom atau bidang dari satu jenis (numerik, karakter, tanggal, mata uang, hellip) dan baris atau Catatan yang berisi pengamatan untuk satu entitas. SQL lsquoqueriesrsquo are quite general operations on a relational database. The classical query is a SELECT statement of the type The first of these selects two columns from the R data frame USArrests that has been copied across to a database table, subsets on a third column and asks the results be sorted. The second performs a database join on two tables student and school and returns four columns. The third and fourth queries do some cross-tabulation and return counts or averages. (The five aggregation functions are COUNT() and SUM, MAX, MIN and AVG, each applied to a single column.) SELECT queries use FROM to select the table, WHERE to specify a condition for inclusion (or more than one condition separated by AND or OR), and ORDER BY to sort the result. Unlike data frames, rows in RDBMS tables are best thought of as unordered, and without an ORDER BY statement the ordering is indeterminate. You can sort (in lexicographical order) on more than one column by separating them by commas. Placing DESC after an ORDER BY puts the sort in descending order. SELECT DISTINCT queries will only return one copy of each distinct row in the selected table. The GROUP BY clause selects subgroups of the rows according to the criterion. If more than one column is specified (separated by commas) then multi-way cross-classifications can be summarized by one of the five aggregation functions. A HAVING clause allows the select to include or exclude groups depending on the aggregated value. If the SELECT statement contains an ORDER BY statement that produces a unique ordering, a LIMIT clause can be added to select (by number) a contiguous block of output rows. This can be useful to retrieve rows a block at a time. (It may not be reliable unless the ordering is unique, as the LIMIT clause can be used to optimize the query.) There are queries to create a table (CREATE TABLE, but usually one copies a data frame to the database in these interfaces), INSERT or DELETE or UPDATE data. A table is destroyed by a DROP TABLE lsquoqueryrsquo. Kline and Kline (2001) discuss the details of the implementation of SQL in Microsoft SQL Server 2000, Oracle, MySQL and PostgreSQL. 4.2.2 Data types Data can be stored in a database in various data types. The range of data types is DBMS-specific, but the SQL standard defines many types, including the following that are widely implemented (often not by the SQL name). Real number, with optional precision. Often called real or double or double precision. 32-bit integer. Often called int. fixed-length character string. Often called char. character varying( n ) variable-length character string. Often called varchar. Almost always has a limit of 255 chars. true or false. Sometimes called bool or bit. There are variants on time and timestamp. with timezone. Other types widely implemented are text and blob. for large blocks of text and binary data, respectively. The more comprehensive of the R interface packages hide the type conversion issues from the user. 4.3 R interface packages There are several packages available on CRAN to help R communicate with DBMSs. They provide different levels of abstraction. Some provide means to copy whole data frames to and from databases. All have functions to select data within the database via SQL queries, and to retrieve the result as a whole as a data frame or in pieces (usually as groups of rows). All except RODBC are tied to one DBMS, but there has been a proposal for a unified lsquofront-endrsquo package DBI (developer. r-project. orgdb ) in conjunction with a lsquoback-endrsquo, the most developed of which is RMySQL . Also on CRAN are the back-ends ROracle . RPostgreSQL and RSQLite (which works with the bundled DBMS SQLite. sqlite. org ) and RJDBC (which uses Java and can connect to any DBMS that has a JDBC driver). Package RMongo provides an R interface to a Java client for lsquoMongoDBrsquo (en. wikipedia. orgwikiMongoDB ) databases, which are queried using JavaScript rather than SQL. Package mongolite is another client using mongodb rsquos C driver. 4.3.1 Packages using DBI Package RMySQL on CRAN provides an interface to the MySQL database system (see mysql and Dubois, 2000) or its fork MariaDB (see mariadb. org ). The description here applies to versions 0.5-0 and later: earlier versions had a substantially different interface. The current version requires the DBI package, and this description will apply with minor changes to all the other back-ends to DBI . MySQL exists on UnixLinuxmacOS and Windows: there is a lsquoCommunity Editionrsquo released under GPL but commercial licenses are also available. MySQL was originally a lsquolight and leanrsquo database. (It preserves the case of names where the operating file system is case-sensitive, so not on Windows.) The call dbDriver(quotMySQLquot) returns a database connection manager object, and then a call to dbConnect opens a database connection which can subsequently be closed by a call to the generic function dbDisconnect. Use dbDriver(quotOraclequot). dbDriver(quotPostgreSQLquot) or dbDriver(quotSQLitequot) with those DBMSs and packages ROracle . RPostgreSQL or RSQLite respectively. SQL queries can be sent by either dbSendQuery or dbGetQuery. dbGetquery sends the query and retrieves the results as a data frame. dbSendQuery sends the query and returns an object of class inheriting from quotDBIResultquot which can be used to retrieve the results, and subsequently used in a call to dbClearResult to remove the result. Function fetch is used to retrieve some or all of the rows in the query result, as a list. The function dbHasCompleted indicates if all the rows have been fetched, and dbGetRowCount returns the number of rows in the result. These are convenient interfaces to readwritetestdelete tables in the database. dbReadTable and dbWriteTable copy to and from an R data frame, mapping the row names of the data frame to the field rownames in the MySQL table. 4.3.2 Package RODBC Package RODBC on CRAN provides an interface to database sources supporting an ODBC interface. This is very widely available, and allows the same R code to access different database systems. RODBC runs on UnixLinux, Windows and macOS, and almost all database systems provide support for ODBC. We have tested Microsoft SQL Server, Access, MySQL, PostgreSQL, Oracle and IBM DB2 on Windows and MySQL, MariaDB, Oracle, PostgreSQL and SQLite on Linux. ODBC is a client-server system, and we have happily connected to a DBMS running on a Unix server from a Windows client, and vice versa . On Windows ODBC support is part of the OS. On UnixLinux you will need an ODBC Driver Manager such as unixODBC (unixODBC. org ) or iOBDC (iODBC. org. this is pre-installed in macOS) and an installed driver for your database system. Windows provides drivers not just for DBMSs but also for Excel (.xls ) spreadsheets, DBase (.dbf ) files and even text files. (The named applications do not need to be installed. Which file formats are supported depends on the versions of the drivers.) There are versions for Excel and Access 20072010 (go to microsoften-usdownloaddefault. aspx. and search for lsquoOffice ODBCrsquo, which will lead to AccessDatabaseEngine. exe ), the lsquo2007 Office System Driverrsquo (the latter has a version for 64-bit Windows, and that will also read earlier versions). On macOS the Actual Technologies (actualtechproductaccess. php ) drivers provide ODBC interfaces to Access databases and to Excel spreadsheets (not including Excel 20072010). Many simultaneous connections are possible. A connection is opened by a call to odbcConnect or odbcDriverConnect (which on the Windows GUI allows a database to be selected via dialog boxes) which returns a handle used for subsequent access to the database. Printing a connection will provide some details of the ODBC connection, and calling odbcGetInfo will give details on the client and server. A connection is closed by a call to close or odbcClose. and also (with a warning) when not R object refers to it and at the end of an R session. Details of the tables on a connection can be found using sqlTables. Function sqlSave copies an R data frame to a table in the database, and sqlFetch copies a table in the database to an R data frame. An SQL query can be sent to the database by a call to sqlQuery. This returns the result in an R data frame. ( sqlCopy sends a query to the database and saves the result as a table in the database.) A finer level of control is attained by first calling odbcQuery and then sqlGetResults to fetch the results. The latter can be used within a loop to retrieve a limited number of rows at a time, as can function sqlFetchMore. Here is an example using PostgreSQL, for which the ODBC driver maps column and data frame names to lower case. We use a database testdb we created earlier, and had the DSN (data source name) set up in. odbc. ini under unixODBC. Exactly the same code worked using MyODBC to access a MySQL database under Linux or Windows (where MySQL also maps names to lowercase). Under Windows, DSN s are set up in the ODBC applet in the Control Panel (lsquoData Sources (ODBC)rsquo in the lsquoAdministrative Toolsrsquo section). As a simple example of using ODBC under Windows with a Excel spreadsheet, we can read from a spreadsheet by Notice that the specification of the table is different from the name returned by sqlTables. sqlFetch is able to map the differences. 5.1 Binary data formats Both of these are systems to store scientific data in array-oriented ways, including descriptions, labels, formats, units, hellip. HDF5 also allows groups of arrays, and the R interface maps lists to HDF5 groups, and can write numeric and character vectors and matrices. NetCDFrsquos version 4 format (confusingly, implemented in netCDF 4.1.1 and later, but not in 4.0.1) includes the use of various HDF5 formats. This is handled by package ncdf4 whereas RNetCDF handles version 3 files. The availability of software to support these formats is somewhat limited by platform, especially on Windows. 5.2 dBase files (DBF) dBase was a DOS program written by Ashton-Tate and later owned by Borland which has a binary flat-file format that became popular, with file extension. dbf. It has been adopted for the rsquoXbasersquo family of databases, covering dBase, Clipper, FoxPro and their Windows equivalents Visual dBase, Visual Objects and Visual FoxPro (see e-bachmann. dkdocsxbase. htm ). A dBase file contains a header and then a series of fields and so is most similar to an R data frame. The data itself is stored in text format, and can include character, logical and numeric fields, and other types in later versions (see for example digitalpreservation. govformatsfddfdd000325.shtml and clicketyclick. dkdatabasesxbaseformatindex. html ). Functions read. dbf and write. dbf provide ways to read and write basic DBF files on all R platforms. For Windows users odbcConnectDbase in package RODBC provides more comprehensive facilities to read DBF files via Microsoftrsquos dBase ODBC driver (and the Visual FoxPro driver can also be used via odbcDriverConnect ). 6 Image files A particular class of binary files are those representing images, and a not uncommon request is to read such a file into R as a matrix. There are many formats for image files (most with lots of variants), and it may be necessary to use external conversion software to first convert the image into one of the formats for which a package currently provides an R reader. A versatile example of such software is ImageMagick and its fork GraphicsMagick. These provide command-line programs convert and gm convert to convert images from one format to another: what formats they can input is determined when they are compiled, and the supported formats can be listed by e. g. convert - list format. Package pixmap has a function read. pnm to read lsquoportable anymaprsquo images in PBM (blackwhite), PGM (grey) and PPM (RGB colour) formats. These are also known as lsquonetpbmrsquo formats. Packages bmp . jpeg and png read the formats after which they are named. See also packages biOps and Momocs . and Bioconductor package EBImage . TIFF is more a meta-format, a wrapper within which a very large variety of image formats can be embedded. Packages rtiff and tiff can read some of the sub-formats (depending on the external libtiff software against which they are compiled). There some facilities for specialized sub-formats, for example in Bioconductor package beadarray . Raster files are common in the geographical sciences, and package rgdal provides an interface to GDAL which provides some facilities of its own to read raster files and links to many others. Which formats it supports is determined when GDAL is compiled: use gdalDrivers() to see what these are for the build you are using. It can be useful for uncommon formats such as JPEG 2000 (which is a different format from JPEG, and not currently supported in the macOS nor Windows binary versions of rgdal ). 7 Connections Connections are used in R in the sense of Chambers (1998) and Ripley (2001), a set of functions to replace the use of file names by a flexible interface to file-like objects. 7.1 Types of connections The most familiar type of connection will be a file, and file connections are created by function file. File connections can (if the OS will allow it for the particular file) be opened for reading or writing or appending, in text or binary mode. In fact, files can be opened for both reading and writing, and R keeps a separate file position for reading and writing. Note that by default a connection is not opened when it is created. The rule is that a function using a connection should open a connection (needed) if the connection is not already open, and close a connection after use if it opened it. In brief, leave the connection in the state you found it in. There are generic functions open and close with methods to explicitly open and close connections. Files compressed via the algorithm used by gzip can be used as connections created by the function gzfile. whereas files compressed by bzip2 can be used via bzfile. Unix programmers are used to dealing with special files stdin. stdout and stderr. These exist as terminal connections in R. They may be normal files, but they might also refer to input from and output to a GUI console. (Even with the standard Unix R interface, stdin refers to the lines submitted from readline rather than a file.) The three terminal connections are always open, and cannot be opened or closed. stdout and stderr are conventionally used for normal output and error messages respectively. They may normally go to the same place, but whereas normal output can be re-directed by a call to sink. error output is sent to stderr unless re-directed by sink, typequotmessagequot). Note carefully the language used here: the connections cannot be re-directed, but output can be sent to other connections. Text connections are another source of input. They allow R character vectors to be read as if the lines were being read from a text file. A text connection is created and opened by a call to textConnection. which copies the current contents of the character vector to an internal buffer at the time of creation. Text connections can also be used to capture R output to a character vector. textConnection can be asked to create a new character object or append to an existing one, in both cases in the userrsquos workspace. The connection is opened by the call to textConnection. and at all times the complete lines output to the connection are available in the R object. Closing the connection writes any remaining output to a final element of the character vector. Pipes are a special form of file that connects to another process, and pipe connections are created by the function pipe. Opening a pipe connection for writing (it makes no sense to append to a pipe) runs an OS command, and connects its standard input to whatever R then writes to that connection. Conversely, opening a pipe connection for input runs an OS command and makes its standard output available for R input from that connection. URL s of types lsquo rsquo, lsquo rsquo, lsquo ftp: rsquo and lsquo file: rsquo can be read from using the function url. For convenience, file will also accept these as the file specification and call url. Sockets can also be used as connections via function socketConnection on platforms which support Berkeley-like sockets (most Unix systems, Linux and Windows). Sockets can be written to or read from, and both client and server sockets can be used. 7.2 Output to connections We have described functions cat. write. write. table and sink as writing to a file, possibly appending to a file if argument append TRUE. and this is what they did prior to R version 1.2.0. The current behaviour is equivalent, but what actually happens is that when the file argument is a character string, a file connection is opened (for writing or appending) and closed again at the end of the function call. If we want to repeatedly write to the same file, it is more efficient to explicitly declare and open the connection, and pass the connection object to each call to an output function. This also makes it possible to write to pipes, which was implemented earlier in a limited way via the syntax file quotcmdquot (which can still be used). There is a function writeLines to write complete text lines to a connection. Some simple examples are 7.3 Input from connections The basic functions to read from connections are scan and readLines. These take a character string argument and open a file connection for the duration of the function call, but explicitly opening a file connection allows a file to be read sequentially in different formats. Other functions that call scan can also make use of connections, in particular read. table. Some simple examples are For convenience, if the file argument specifies a FTP, HTTP or HTTPS URL. the URL is opened for reading via url. Specifying files via lsquo file:foo. bar rsquo is also allowed. 7.3.1 Pushback C programmers may be familiar with the ungetc function to push back a character onto a text input stream. R connections have the same idea in a more powerful way, in that an (essentially) arbitrary number of lines of text can be pushed back onto a connection via a call to pushBack. Pushbacks operate as a stack, so a read request first uses each line from the most recently pushbacked text, then those from earlier pushbacks and finally reads from the connection itself. Once a pushbacked line is read completely, it is cleared. The number of pending lines pushed back can be found via a call to pushBackLength. A simple example will show the idea. Pushback is only available for connections opened for input in text mode. 7.4 Listing and manipulating connections A summary of all the connections currently opened by the user can be found by showConnections(). and a summary of all connections, including closed and terminal connections, by showConnections(all TRUE) The generic function seek can be used to read and (on some connections) reset the current position for reading or writing. Unfortunately it depends on OS facilities which may be unreliable (e. g. with text files under Windows). Function isSeekable reports if seek can change the position on the connection given by its argument. The function truncate can be used to truncate a file opened for writing at its current position. It works only for file connections, and is not implemented on all platforms. 7.5 Binary connections Functions readBin and writeBin read to and write from binary connections. A connection is opened in binary mode by appending quotbquot to the mode specification, that is using mode quotrbquot for reading, and mode quotwbquot or quotabquot (where appropriate) for writing. The functions have arguments In each case con is a connection which will be opened if necessary for the duration of the call, and if a character string is given it is assumed to specify a file name. It is slightly simpler to describe writing, so we will do that first. object should be an atomic vector object, that is a vector of mode numeric. integer. logical. karakter. complex or raw. without attributes. By default this is written to the file as a stream of bytes exactly as it is represented in memory. readBin reads a stream of bytes from the file and interprets them as a vector of mode given by what. This can be either an object of the appropriate mode (e. g. whatinteger() ) or a character string describing the mode (one of the five given in the previous paragraph or quotdoublequot or quotintquot ). Argument n specifies the maximum number of vector elements to read from the connection: if fewer are available a shorter vector will be returned. Argument signed allows 1-byte and 2-byte integers to be read as signed (the default) or unsigned integers. The remaining two arguments are used to write or read data for interchange with another program or another platform. By default binary data is transferred directly from memory to the connection or vice versa . This will not suffice if the data are to be transferred to a machine with a different architecture, but between almost all R platforms the only change needed is that of byte-order. Common PCs (lsquo ix86 rsquo-based and lsquo x8664 rsquo-based machines), Compaq Alpha and Vaxen are little-endian . whereas Sun Sparc, mc680x0 series, IBM R6000, SGI and most others are big-endian . (Network byte-order (as used by XDR, eXternal Data Representation) is big-endian.) To transfer to or from other programs we may need to do more, for example to read 16-bit integers or write single-precision real numbers. This can be done using the size argument, which (usually) allows sizes 1, 2, 4, 8 for integers and logicals, and sizes 4, 8 and perhaps 12 or 16 for reals. Transferring at different sizes can lose precision, and should not be attempted for vectors containing NA rsquos. Character strings are read and written in C format, that is as a string of bytes terminated by a zero byte. Functions readChar and writeChar provide greater flexibility. 8.1 Reading from sockets Base R comes with some facilities to communicate via BSD sockets on systems that support them (including the common Linux, Unix and Windows ports of R). One potential problem with using sockets is that these facilities are often blocked for security reasons or to force the use of Web caches, so these functions may be more useful on an intranet than externally. For new projects it is suggested that socket connections are used instead. The earlier low-level interface is given by functions make. socket. read. socket. write. socket and close. socket. 8.2 Using download. file Function download. file is provided to read a file from a Web resource via FTP or HTTP (including HTTPS) and write it to a file. Often this can be avoided, as functions such as read. table and scan can read directly from a URL, either by explicitly using url to open a connection, or implicitly using it by giving a URL as the file argument. 9 Reading Excel spreadsheets The most common R data importexport question seems to be lsquohow do I read an Excel spreadsheetrsquo. This chapter collects together advice and options given earlier. Note that most of the advice is for pre-Excel 2007 spreadsheets and not the later. xlsx format. The first piece of advice is to avoid doing so if possible If you have access to Excel, export the data you want from Excel in tab-delimited or comma-separated form, and use read. delim or read. csv to import it into R. (You may need to use read. delim2 or read. csv2 in a locale that uses comma as the decimal point.) Exporting a DIF file and reading it using read. DIF is another possibility. If you do not have Excel, many other programs are able to read such spreadsheets and export in a text format on both Windows and Unix, for example Gnumeric (gnome. orgprojectsgnumeric ) and OpenOffice (openoffice. org ). You can also cut-and-paste between the display of a spreadsheet in such a program and R: read. table will read from the R console or, under Windows, from the clipboard (via file quotclipboardquot or readClipboard ). The read. DIF function can also read from the clipboard. Note that an Excel. xls file is not just a spreadsheet: such files can contain many sheets, and the sheets can contain formulae, macros and so on. Not all readers can read other than the first sheet, and may be confused by other contents of the file. Windows users (of 32-bit R) can use odbcConnectExcel in package RODBC . This can select rows and columns from any of the sheets in an Excel spreadsheet file (at least from Excel 97ndash2003, depending on your ODBC drivers: by calling odbcConnect directly versions back to Excel 3.0 can be read). The version odbcConnectExcel2007 will read the Excel 2007 formats as well as earlier ones (provided the drivers are installed, including with 64-bit Windows R: see RODBC ). macOS users can also use RODBC if they have a suitable driver (e. g. that from Actual Technologies). Perl users have contributed a module OLE::SpreadSheet::ParseExcel and a program xls2csv. pl to convert Excel 95ndash2003 spreadsheets to CSV files. Package gdata provides a basic wrapper in its read. xls function. With suitable Perl modules installed this function can also read Excel 2007 spreadsheets. Packages dataframes2xls and WriteXLS each contain a function to write one or more data frames to an. xls file, using Python and Perl respectively. Packages xlsx can read and and manipulate Excel 2007 and later spreadsheets: it requires Java. Package XLConnect can read, write and manipulate both Excel 97ndash2003 and Excel 200710 spreadsheets, using Java. Package readxl can read both Excel 97ndash2003 and Excel 200710 spreadsheets, using an included C library. Appendix A References R. A. Becker, J. M. Chambers and A. R. Wilks (1988) The New S Language. A Programming Environment for Data Analysis and Graphics. Wadsworth amp BrooksCole. J. Bowman, S. Emberson and M. Darnovsky (1996) The Practical SQL Handbook. Using Structured Query Language. Addison-Wesley. J. M. Chambers (1998) Programming with Data. A Guide to the S Language. Springer-Verlag. P. Dubois (2000) MySQL. New Riders. M. Henning and S. Vinoski (1999) Advanced CORBA Programming with C. Addison-Wesley. K. Kline and D. Kline (2001) SQL in a Nutshell. OrsquoReilly. B. Momjian (2000) PostgreSQL: Introduction and Concepts. Addison-Wesley. Also available at momjian. usmainwritingspgsqlawpgsqlbook. T. M. Therneau and P. M. Grambsch (2000) Modeling Survival Data. Extending the Cox Model. Springer-Verlag. E. J. Yarger, G. Reese and T. King (1999) MySQL amp mSQL . OrsquoReilly. Function and variable index
No comments:
Post a Comment