Mengonversi Antarjenis Numerik
Gunakan as.integer(), as.double(), dan as.numeric() dengan aman.
Mengonversi Antarjenis Numerik adalah pelajaran R Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar R Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus R Academy mencakup 4 pelajaran total.
Integer vs Double di R
R memiliki dua tipe numeric: integer (bilangan bulat, dibuat dengan akhiran L) dan double (floating-point, bawaan untuk literal numeric). Sering kali R menggunakan double, tetapi membedakan keduanya penting untuk keamanan tipe dan efisiensi memori.
x_dbl <- 5 # double by default
x_int <- 5L # integer (L suffix)
cat('typeof(5): ', typeof(x_dbl), '
') # double
cat('typeof(5L): ', typeof(x_int), '
') # integer
cat('5 == 5L: ', x_dbl == x_int, '
') # TRUE (values equal)
cat('identical: ', identical(x_dbl, x_int), '
') # FALSE (types differ)as.integer() — Mengonversi ke Integer
as.integer(x) mengonversi nilai menjadi integer dengan cara memotong (bukan membulatkan) bagian desimal. Artinya, 3.9 menjadi 3, bukan 4. Akhiran L adalah sintaks singkat untuk literal integer.
cat('as.integer(3.7): ', as.integer(3.7), '
') # 3 (truncated, not 4)
cat('as.integer(3.2): ', as.integer(3.2), '
') # 3
cat('as.integer(-2.9): ', as.integer(-2.9), '
') # -2 (toward zero)
cat('as.integer(10.9): ', as.integer(10.9), '
') # 10
# Compare with round
cat('round(3.7): ', round(3.7), '
') # 4as.double() dan as.numeric()
as.double(x) dan as.numeric(x) setara—keduanya mengonversi nilai menjadi double (floating-point). Gunakan fungsi tersebut untuk mengonversi integer menjadi double saat Anda memerlukan presisi pecahan.
count <- 7L # integer
cat('typeof(count): ', typeof(count), '
')
dbl_count <- as.double(count)
cat('typeof(as.double(7L)): ', typeof(dbl_count), '
') # double
cat('Value: ', dbl_count, '
') # 7
# Division automatically promotes to double
cat('7L / 2L: ', 7L / 2L, '
') # 3.5 (double)
cat('typeof(7L / 2L): ', typeof(7L / 2L), '
') # doubleAritmetika Integer
Aritmetika integer di R menghasilkan integer untuk +, -, dan *, tetapi selalu menghasilkan double untuk /. Hal ini dapat mengejutkan jika Anda mengharapkan pembagian integer tetap menghasilkan integer.
a <- 6L
b <- 3L
cat('6L + 3L =', a + b, '| typeof:', typeof(a + b), '
') # 9 integer
cat('6L - 3L =', a - b, '| typeof:', typeof(a - b), '
') # 3 integer
cat('6L * 3L =', a * b, '| typeof:', typeof(a * b), '
') # 18 integer
cat('6L / 3L =', a / b, '| typeof:', typeof(a / b), '
') # 2 DOUBLE!
cat('6L %/% 3L =', a %/% b, '| typeof:', typeof(a %/% b), '
') # 2 integerPemotongan vs Pembulatan
Pembedaan penting: as.integer() memotong (menghapus desimal), sedangkan round() membulatkan ke bilangan bulat terdekat. Selalu nyatakan dengan jelas perilaku yang Anda inginkan.
values <- c(2.1, 2.5, 2.9, -2.1, -2.5, -2.9)
cat('Original: ', values, '
')
cat('as.integer(): ', as.integer(values), '
') # truncate toward 0
cat('round(): ', round(values), '
') # banker rounding
cat('floor(): ', floor(values), '
') # round down
cat('ceiling(): ', ceiling(values), '
') # round upRisiko Integer Overflow
Integer di R berukuran 32-bit dan dapat menyimpan nilai hingga sekitar ±2,1 miliar. Melebihi rentang ini menyebabkan NA disertai peringatan. Double dapat menyimpan nilai yang jauh lebih besar (hingga sekitar 1,8 × 10^308).
max_int <- .Machine$integer.max
cat('Max integer:', max_int, '
') # 2147483647
# Overflow produces NA
cat('max_int + 1L:', max_int + 1L, '
') # NA with warning
# Double handles it fine
cat('as.double(max_int) + 1:', as.double(max_int) + 1, '
') # 2147483648Akhiran L dalam Vektor
Anda dapat membuat vektor integer dengan menggunakan akhiran L pada setiap elemen, atau dengan meneruskan suatu urutan melalui as.integer(). Operator titik dua : secara otomatis menghasilkan integer.
# Colon produces integers
seq_int <- 1:5
cat('1:5 typeof:', typeof(seq_int), '
') # integer
# Explicit integer vector
vec_int <- c(10L, 20L, 30L, 40L)
cat('c(10L,...) typeof:', typeof(vec_int), '
') # integer
# as.integer on a vector
vec_dbl <- c(1.1, 2.9, 3.5, 4.7)
cat('as.integer(c(1.1,...)):', as.integer(vec_dbl), '
') # 1 2 3 4Memori dan Performa
Integer menggunakan 4 byte per elemen; double menggunakan 8 byte. Untuk vektor yang sangat besar dan berisi bilangan bulat, penggunaan integer dapat mengurangi penggunaan memori hingga setengahnya. Namun, aritmetika antara tipe campuran secara otomatis mempromosikan hasilnya menjadi double.
n <- 1000000L
vec_int <- 1:n # integer: 4 bytes each
vec_dbl <- as.double(1:n) # double: 8 bytes each
cat('Integer vector size:', object.size(vec_int), 'bytes
')
cat('Double vector size: ', object.size(vec_dbl), 'bytes
')
cat('Ratio:', as.numeric(object.size(vec_dbl)) / as.numeric(object.size(vec_int)), '
')Memeriksa Penyimpanan Integer dengan is.integer()
Selalu gunakan is.integer() (bukan is.numeric()) jika Anda perlu memverifikasi penyimpanan integer secara khusus. Angka tanpa akhiran L merupakan double meskipun tampak seperti bilangan bulat.
a <- 5 # looks like integer, but it is double
b <- 5L # true integer
cat('is.integer(5): ', is.integer(a), '
') # FALSE!
cat('is.integer(5L): ', is.integer(b), '
') # TRUE
cat('is.numeric(5): ', is.numeric(a), '
') # TRUE
cat('is.numeric(5L): ', is.numeric(b), '
') # TRUE
cat('class(5): ', class(a), '
') # numeric
cat('class(5L): ', class(b), '
') # integerContoh Alur Kerja Konversi
Alur kerja praktis: baca data sebagai double (bawaan), lakukan perhitungan, lalu konversikan hasil secara eksplisit menjadi integer jika diperlukan bilangan bulat (misalnya, untuk jumlah, indeks, dan ID).
# Simulated: reading counts as doubles (common from CSV)
counts_raw <- c(12.0, 8.0, 15.0, 3.0, 22.0)
cat('typeof raw:', typeof(counts_raw), '
') # double
# Convert to integer for proper storage
counts_int <- as.integer(counts_raw)
cat('typeof converted:', typeof(counts_int), '
') # integer
cat('Counts:', counts_int, '
')
cat('Total:', sum(counts_int), '
')Ringkasan Konversi Numeric
Fungsi konversi utama untuk tipe numeric:
as.integer(x)— memotong menjadi integer (menghapus desimal, menuju nol)as.double(x)/as.numeric(x)— mengonversi menjadi doubleround(x)— membulatkan ke nilai terdekat (gunakan untuk nilai yang menyerupai integer)floor(x)/ceiling(x)— membulatkan ke bawah / ke atas- Sintaks
5L— literal integer (tidak memerlukan konversi) 1:n— selalu menghasilkan integer
x <- 7.8
cat('as.integer(7.8):', as.integer(x), '
') # 7 (truncate)
cat('round(7.8): ', round(x), '
') # 8
cat('floor(7.8): ', floor(x), '
') # 7
cat('ceiling(7.8): ', ceiling(x), '
') # 8Pemeriksaan Singkat
Apa hasil dari as.integer(3.9) di R?
Ringkasan: Konversi Tipe Numeric
Bagus sekali! Hal-hal penting dari pelajaran ini:
- R memiliki dua tipe numeric: integer (akhiran L, 4 byte) dan double (bawaan, 8 byte)
as.integer(x)memotong menuju nol—bukan membulatkanas.double()danas.numeric()identik—keduanya mengonversi menjadi double/selalu menghasilkan double, bahkan untuk operand integer1:nmembuat urutan integer; literal numeric tanpa L merupakan double- Integer overflow pada sekitar 2,1 miliar → gunakan double untuk bilangan bulat yang sangat besar
# Demonstrate truncation vs rounding
test_vals <- c(0.1, 0.5, 0.9, 1.5, 2.5, 3.7)
cat('Values: ', test_vals, '
')
cat('as.integer(): ', as.integer(test_vals), '
') # truncation
cat('round(): ', round(test_vals), '
') # nearest (banker)Pertanyaan yang Sering Diajukan
Apakah pelajaran “Mengonversi Antarjenis Numerik” gratis?
Ya — teks lengkap “Mengonversi Antarjenis Numerik” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus R Academy, upgrade ke CoddyKit PRO. Kursus R Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Mengonversi Antarjenis Numerik”?
Gunakan as.integer(), as.double(), dan as.numeric() dengan aman. Kamu berlatih R Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai R Academy?
Tidak diperlukan pengalaman sebelumnya. R Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Mengonversi Antarjenis Numerik” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran R Academy ini?
Ya. Setiap pelajaran R Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Gambaran Umum Sistem Tipe R
- Mengonversi Antarjenis Numerik
- Konversi Logical dan Character
- Kesalahan Koersi dan Praktik Terbaik