Tip dan trik praktis
Sebagian besar dari kita biasanya lebih suka bekerja dalam satu bahasa, baik itu R atau python, namun terkadang kita mungkin harus beralih ke bahasa lain mungkin karena alasan seperti kebutuhan proyek, ketersediaan paket tertentu, dan kepentingan pribadi. Oleh karena itu, saya menulis seri ini untuk seseorang yang sudah terbiasa melakukan ilmu data dengan python tetapi ingin mempelajari R. Saya akan mulai dengan dasar-dasarnya dan membahas topik-topik berikut di artikel ini.
- Struktur data
- Sub-pengaturan
- Struktur kendali
- Fungsi
- Vektorisasi
Struktur Data-
R memiliki 6 kelas atom termasuk -karakter, numerik (nyata atau desimal), bilangan bulat, dan logis, yang cukup jelas dari namanya. Mari kita lihat beberapa struktur data di R.
vektor
Vektor adalah struktur data paling umum dan mendasar di R
dan merupakan pekerja keras R. Secara teknis, vektor dapat berupa salah satu dari dua jenis:
- Vektor atom- Ini mirip dengan array
numpy
satu dimensi di python. Mereka dapat menyimpan nilai numerik, karakter, atau logika. Dalam vektor atom, semua elemen dalam vektor mempunyai tipe data yang sama. - Daftar- Ini mirip dengan
lists
python, dan sama seperti daftar, daftar ini dapat berisi nilai dengan tipe berbeda, dan bahkan daftar lain.
Berikut adalah contoh cara membuat vektor dan daftar atom.
# example of character, numerical, and logical vectors respectively. name <- c("Mike", "Lucy", "John") age <- c(20, 25, 30) student <- c(TRUE, FALSE, TRUE) # example of list student1 <- list("Mike", 20, TRUE)
Mari kita lihat bagaimana Anda dapat mengkonversi dari vektor ke daftar dan sebaliknya.
# convert vector to list name_list <- as.list(name) # convert list to vector student_vector <- unlist(student1)
Sekarang Anda mungkin bertanya-tanya bahwa saya baru saja mengatakan bahwa vektor tidak dapat menampung lebih dari satu tipe data, namun saya masih dapat mengonversi daftar menjadi vektor. Sebenarnya ketika Anda mengonversi daftar menjadi vektor, semua elemen daftar diubah menjadi satu tipe data. Misalnya. ketika kita mengubah siswa1 menjadi vektor, kita mendapatkan vektor karakter, dengan semua elemen sebagai karakter.
student_vector <- unlist(student1) student_vector [1] "Mike" "20" "TRUE"
Objek turunan-Matriks, Array, dan bingkai Dataadalah objek turunan. Matriks dan bingkai data keduanya merupakan objek data persegi panjang. Perbedaannya adalah bahwa dalam sebuah matriks semuanya harus bertipe data yang sama, namun dalam bingkai data seseorang dapat memiliki tipe data yang berbeda di kolom yang berbeda. Singkatnya, Anda dapat menganggap matriks sebagai vektor atom dua dimensi dan bingkai data sebagai daftar dua dimensi. Array mirip dengan matriks tetapi dapat mempunyai lebih dari dua dimensi. Saya akan membahas topik ini lebih detail di bagian selanjutnya.
Subsetting
Mari kita lihat sekilas Subsetting di R. Ada beberapa perbedaan dari python:-
- Pengindeksan dimulai dari 1 di R, tidak seperti 0 di python
- Nilai mulai dan berhenti bersifat inklusif selama pemotongan, tidak seperti python yang nilai berhentinya eksklusif.
- Nilai awal dan akhir harus ditentukan selama pemotongan, tidak seperti python di mana jika Anda tidak menentukan nilai mulai/berhenti, nilai tersebut akan merujuk ke nilai pertama/terakhir.
Sekarang kita tahu bahwa dengan python, kita juga bisa menggunakan pengindeksan terbalik untuk merujuk ke elemen dari yang terakhir menggunakan operator -
. Sayangnya, hal ini tidak mungkin dilakukan di R. Namun, ada beberapa cara agar kita dapat mencapai hasil serupa.
# example of reverse indexing in python x = list(range(1,11)) # access the last element x[-1] # access last 5 elements x[-5:]
Anda dapat mencapai hal serupa di R sebagai berikut.
x = 1:10
# access the last element
x[length(x)]
# access last 5 elements using following three ways
x[ (length(x) - 4): length(x)]
x[length(x) - (4:0)]
x[seq.int(to = length(x), length.out = 5)]
Selanjutnya, Anda juga dapat menggunakan tail
untuk mengakses elemen n
terakhir seperti yang ditunjukkan di bawah ini. Metode ini tidak hanya lebih mudah dibaca, tetapi juga lebih aman untuk digunakan jika Anda tidak yakin bahwa panjang x akan selalu melebihi n
.
# access last 5 elementstail(x,5) [1] 6 7 8 9 10
# access last 20 elementstail(x, 20) [1] 1 2 3 4 5 6 7 8 9 10
Struktur Kontrol
Mari kita lihat beberapa struktur kontrol dasar: -
if, else:-Berikut adalah kode if, else dengan python.
# code for if, else in python if condition 1: # do something elif condition 2: # do something else: # do something else
Berikut ini adalah kode if else di R.
# code for if, else in R if (condition 1) { # do something } else if (condition 2) { # do something } else # do something else
Meskipun sintaksnya cukup familiar, Anda akan melihat bahwa di R-
- lekukan kalimat tidak diperlukan, sebagai gantinya, Anda harus menggunakan
{}
brackets keriting untuk menunjukkan blok kode. Selain itu, perhatikan bahwa jika blok kode berupa satu baris, Anda juga dapat melewatkan tanda kurung kurawal. - ketentuan wajib ditulis dalam tanda kurung lengkung
()
. else if
digunakan sebagai gantielif
.
Perhatikan juga bahwa pernyataan else if
dan else
harus dimulai pada baris yang sama dengan tanda kurung kurawal if
berakhir.
For loop-Sintaks for loop juga sangat mirip dengan python dan R, ingatlah poin-poin yang saya sebutkan di bagian if, else di atas for. Berikut adalah contoh perulangan for pada python.
for i in range(1,11): print(i)
Berikut ini adalah kode yang sesuai di R.
for (i in 1:10) {
print(i)
}
Beberapa hal yang perlu diingat adalah: -
- R menggunakan
next
keyword yang analog dengancontinue
keyword di python - kedua bahasa menggunakan kata kunci
break
untuk keluar dari lingkaran.
Fungsi
Sekarang kita semua sudah familiar dengan struktur dasar mendeklarasikan suatu fungsi dengan python seperti yang dijelaskan di bawah ini.
def functionName( parameters/arguments ): #body of the function return [expression] # this is a sample function in python def addFunction(x, y): z = x + y return z
Demikian pula, kita dapat mendefinisikan fungsi di R sebagai berikut-
functionName<- function(
parameters/arguments) {
#body of the functionreturn( expression ) }
# this is a sample function in R
addFunction <- function( x, y){ z <- x + y return (z) }
Perhatikan bahwa di R tidak perlu menulis return
function untuk mengembalikan nilai dari fungsi tersebut. function()
sendiri mengembalikan nilai yang terakhir dievaluasi bahkan tanpa menyertakan fungsi return()
. Misalnya. seperti yang ditunjukkan pada contoh di bawah ini.
addFunction <- function( x, y){ z <- x + y z }
Vektorisasi
Kita semua akrab dengan pemahaman daftar dengan python, di mana Anda dapat menulis keseluruhan perulangan for dalam satu kalimat.
# basic syntax of list comprehension [ expression for item in list if conditional ] # an example of list comprehension # construct a range of values xs = range(1,11) # filter xs for even values xs = [x for x in xs if x % 2 == 0]
R juga memiliki cara yang sama elegannya (atau mungkin lebih baik) dalam melakukan hal-hal yang mirip dengan pemahaman daftar melalui vektorizaiton, di mana fungsi yang divektorkan dapat diterapkan ke vektor apa pun. Misalnya. kode di atas dapat diimplementasikan di R sebagai berikut: -
# construct a range of values xs <- 1:10 # xs == c(1,2,3,4,5,6,7,8,9,10) # filter xs for even values x[ ifelse(x %%2 == 0, TRUE, FALSE) ] # basically vector[ ifelse( condition , yes, no)]
Mari melangkah lebih jauh dan ambil contoh fungsi paste()
di R yang hanya digunakan untuk menggabungkan dua string. Namun, ketika Anda meneruskan vektor sebagai argumen fungsi paste()
, R akan menerapkan elemen fungsi ini pada vektor dan mengembalikan vektor yang dihasilkan, seperti yang ditunjukkan pada contoh di bawah.
authors <- c("Andrie","Joris") lastnames <- c("de Vries","Meys") paste(authors,lastnames) [1] "Andrie de Vries" "Joris Meys"
Seperti yang Anda lihat pada contoh di atas, R mengambil elemen pertama dari dua vektor dan kemudian menerapkan fungsinya, lalu mengambil elemen kedua dengan cara yang sama dan mengulangi prosesnya. Namun, mari kita lihat apa yang terjadi jika kedua vektor memiliki panjang yang tidak sama pada contoh di bawah.
firstnames <- c("Joris", "Carolien", "Koen") lastname <- c("Meys") paste(firstnames,lastname) [1] "Joris Meys" "Carolien Meys" "Koen Meys"
Jika vektor-vektor tersebut panjangnya tidak sama, R mengulangi vektor yang lebih kecil sampai setiap elemen dari vektor yang lebih panjang habis. Operasi yang divektorkan selalu menghasilkan vektor yang panjangnya sama dengan vektor yang lebih panjang.
Saya harap Anda menikmati bagian pertama dari seri ini, dan ini akan membantu Anda melakukan transisi lebih cepat dari python ke R. Silakan berkomentar dan mengajukan pertanyaan, atau memberikan beberapa saran. Anda juga dapat membaca beberapa artikel saya yang lain di sini.