Video: R tutorial: read.delim & read.table 2024
Menggunakan loop di R sangat berguna, namun Anda dapat menulis kode yang lebih efisien jika Anda tidak melewati nilai tapi di atas indeks. Untuk melakukannya, Anda mengganti bagian tengah dalam fungsi dengan kode berikut:
nclient <- length (client) VAT <- numeric (nclient) for (i in seq_along (client)) {VAT [i] <- switch (client [i], private = 1. 12, public = 1. 06, 1))}
Berikut adalah beberapa perbedaan dari penggunaan nilai vektor untuk perulangan:
-
Anda menetapkan panjang klien vektor ke variabel nclient.
-
Kemudian Anda membuat VAT vektor numerik yang sama persis dengan klien vektor. Ini disebut pra-alokasi dari sebuah vektor.
-
Kemudian Anda melewati indeks klien dan bukan vektor itu sendiri dengan menggunakan fungsi seq_along (). Pada celah pertama melalui loop, nilai pertama dalam PPN diatur menjadi hasil switch () yang diterapkan pada nilai pertama pada klien. Pada pass kedua, nilai kedua PPN adalah hasil switch () yang diterapkan pada nilai kedua pada client dan seterusnya.
Anda mungkin tergoda untuk mengganti seq_along (klien) dengan vektor 1: nclient, tapi itu akan menjadi ide yang buruk. Jika klien vektor memiliki panjang 0, seq_along (klien) membuat vektor kosong dan kode dalam loop tidak pernah dijalankan. Jika Anda menggunakan 1: nclient, R menciptakan sebuah vektor c (1, 0) dan mengulang dua nilai tersebut, memberi Anda hasil yang salah.
Setiap kali Anda memperpanjang sebuah objek di R, R harus menyalin keseluruhan objek dan memindahkannya ke tempat baru di memori. Ini memiliki dua efek:
-
Pertama, ini memperlambat kode Anda, karena semua penyalinan memerlukan waktu.
-
Kedua, saat R terus-menerus memindahkan benda-benda ke dalam memori, memori ini terbagi dalam banyak ruang kecil.
Ini disebut fragmentasi , dan ini membuat komunikasi antara R dan memori menjadi kurang mulus. Anda dapat menghindari fragmentasi ini dengan memori pra-alokasi seperti pada contoh sebelumnya.