Salah satu hal yang digunakan untuk membingungkan saya sebagai yang baru ke R adalah bagaimana memformat angka sebagai persentase untuk dicetak.
Misalnya, tampilkan 0.12345sebagai 12.345%. Saya memiliki sejumlah solusi untuk ini, tetapi tidak satu pun dari ini tampaknya "baru oleh ramah". Sebagai contoh:
set.seed(1)
m <- runif(5)
paste(round(100*m, 2), "%", sep="")
[1] "26.55%" "37.21%" "57.29%" "90.82%" "20.17%"
sprintf("%1.2f%%", 100*m)
[1] "26.55%" "37.21%" "57.29%" "90.82%" "20.17%"
Pertanyaan: Apakah ada fungsi dasar R untuk melakukan ini? Atau, apakah ada paket yang digunakan secara luas yang menyediakan pembungkus yang nyaman?
Meskipun mencari sesuatu seperti ini ?format, ?formatCdan ?prettyNum, saya belum menemukan pembungkus nyaman yang sesuai di basis R. ??"percent"tidak menghasilkan sesuatu yang berguna. library(sos); findFn("format percent")mengembalikan 1.250 hit - jadi sekali lagi tidak berguna. ggplot2memiliki fungsi percenttetapi ini tidak memberikan kontrol atas akurasi pembulatan.
sprintfbaik-baik saja untuk subset dari coders R yang juga kebetulan programmer. Saya memiliki banyak kode dalam hidup saya, termasuk COBOL (gemetar) dan fortran (menunjukkan usia saya). Tapi saya tidak menganggap sprintfaturan format jelas (terjemahan: WTF?). Dan tentu saja bungkus khusus harus lebih mudah dihubungi daripada sprintf, misalnya:format_percent(x=0.12345, digits=2)
sprintf()hampir tidak memakan waktu banyak daripada mengetahui bahwa paket foo berisi format_percent(). Apa yang terjadi jika pengguna kemudian tidak ingin memformat sebagai persen tetapi sesuatu yang serupa? Mereka perlu menemukan pembungkus lain. Dalam jangka panjang, pembelajaran alat dasar akan bermanfaat.
%adalah karakter komentar di LaTeX, yang merupakan format pelaporan "default" untuk R. Jadi, sementara itu mungkin berguna untuk memberi label pada grafik, kehati-hatian harus diperhatikan jika nomor yang diformat akan di-Sweave.
sprintftampaknya menjadi solusi favorit di milis, dan saya belum melihat solusi yang lebih baik. Fungsi bawaan apa pun tidak akan lebih mudah untuk dipanggil, bukan?