Fungsi dalam Pemrograman R dengan Contoh

โšก Ringkasan Cerdas

Fungsi dalam paket R menggabungkan serangkaian instruksi dalam satu nama, sehingga tugas yang berulang dapat dijalankan hanya dengan satu panggilan. Fitur-fitur yang tersedia meliputi: pembantu matematika dan statistik bawaan, fungsi yang ditentukan pengguna, dan cakupan lingkungan.ping, dan argumen bersyarat dibahas di sini dengan contoh-contoh yang telah dikerjakan.

  • ๐Ÿ”˜ Anatomi Fungsional: Sebuah fungsi menggabungkan nama, daftar argumen opsional, isi, dan nilai kembalian opsional.
  • ๐Ÿงฎ Cakupan Terintegrasi: R menyertakan fungsi-fungsi pembantu umum seperti diff() dan length() di samping fungsi-fungsi matematika dan statistik.
  • ๐Ÿ“ Penskalaan Ulang yang Dapat Digunakan Kembali: Fungsi normalize() mengubah blok penskalaan ulang yang disalin dan ditempel menjadi satu panggilan yang dapat digunakan kembali.
  • ๐Ÿงญ Peraturan Lingkungan: Setiap panggilan membuka lingkungan lokal, dan R menyelesaikan nama dari definisi terdalam ke luar.
  • ๐Ÿงช Logika Bersyarat: Cabang if/else di dalam split_data() mengembalikan set pelatihan atau set pengujian.
  • ๏ธ Praktik Penamaan: Memberi nama fungsi yang didefinisikan pengguna secara berbeda dari fungsi bawaan akan menghindari penyamaran dan kesalahan yang membingungkan.

Fungsi dalam Pemrograman R

Apa itu Fungsi di R?

A fungsi, dalam lingkungan pemrograman, adalah sekumpulan instruksi. Seorang programmer membangun fungsi yang harus dihindari mengulangi tugas yang samaatau mengurangi kompleksitas.

Suatu fungsi seharusnya

  • ditulis untuk melaksanakan tugas tertentu
  • mungkin menyertakan atau tidak menyertakan argumen
  • berisi tubuh
  • Mungkin mengembalikan satu atau lebih nilai, atau mungkin tidak.

Pendekatan umum terhadap suatu fungsi adalah dengan menggunakan bagian argumen sebagai input, memberi makan tubuh bagian dan akhirnya mengembalikan an keluaranSintaksis suatu fungsi adalah sebagai berikut:

function (arglist)  {
  #Function body
}

R fungsi bawaan yang penting

Ada banyak fungsi bawaan di R. R mencocokkan parameter input Anda dengan argumen fungsinya, baik berdasarkan nilai atau posisi, lalu mengeksekusi isi fungsi. Argumen fungsi dapat memiliki nilai default: jika Anda tidak menentukan argumen ini, R akan mengambil nilai default.
Note:
Kode sumber suatu fungsi dapat dilihat dengan menjalankan nama fungsi itu sendiri di konsol.

Typing Nama fungsi tanpa tanda kurung akan mencetak kode sumbernya, seperti yang ditunjukkan konsol di bawah ini.

Konsol R mencetak kode sumber fungsi bawaan.

Kita akan melihat tiga kelompok fungsi beraksi

  • Fungsi umum
  • Fungsi matematika
  • Fungsi statistik

Fungsi umum

Kita sudah familiar dengan fungsi-fungsi umum seperti cbind(), rbind(), range(), menyortir(), dan order(). Masing-masing fungsi ini memiliki tugas spesifik, menerima argumen untuk mengembalikan output. Berikut adalah fungsi-fungsi penting yang harus diketahui:

perbedaan() fungsi

Jika Anda bekerja pada seri waktu, Anda perlu stasioner seri tersebut dengan mengambilnya nilai ketertinggalan. Sebuah proses stasioner Memungkinkan rata-rata, varians, dan autokorelasi konstan sepanjang waktu. Ini terutama meningkatkan prediksi deret waktu. Hal ini dapat dilakukan dengan fungsi diff(). Kita dapat membangun data deret waktu acak dengan tren dan kemudian menggunakan fungsi diff() untuk menstabilkan deret tersebut. Fungsi diff() menerima satu argumen, yaitu vektor, dan mengembalikan perbedaan yang tertunda dan berulang yang sesuai.

NoteKita sering perlu membuat data acak, tetapi untuk pembelajaran dan perbandingan, kita menginginkan angka-angka yang identik di semua mesin. Untuk memastikan kita semua menghasilkan data yang sama, kita menggunakan fungsi `set.seed()` dengan nilai sembarang 123. `set.seed()` menetapkan titik awal generator angka pseudorandom, sehingga setiap mesin menghasilkan urutan yang sama. Tanpa `set.seed()`, setiap eksekusi akan menghasilkan urutan yang berbeda.

set.seed(123)
## Create the data
x = rnorm(1000)
ts <- cumsum(x)
## Stationary the serie
diff_ts <- diff(ts)
par(mfrow=c(1,2))
## Plot the series
plot(ts, type='l')
plot(diff(ts), type='l')

Dua panel di bawah ini menempatkan deret kumulatif asli di samping deret yang telah dibedakan, yang sekarang berfluktuasi di sekitar nilai rata-rata yang konstan.

Deret kumulatif asli di samping deret stasioner yang telah dibedakan.

fungsi panjang()

Dalam banyak kasus, kita ingin mengetahui panjang sebuah vektor untuk keperluan komputasi atau untuk digunakan dalam sebuah perulangan for. Fungsi length() menghitung jumlah baris dalam vektor x. Kode berikut mengimpor dataset cars dan mengembalikan jumlah baris.

NoteFungsi `length()` mengembalikan jumlah elemen dalam sebuah vektor. Jika fungsi ini diberikan sebagai input ke dalam sebuah matriks atau berupa data frame, jumlah kolom akan dikembalikan.

dt <- cars
## number columns
length(dt)

Keluaran:

## [1] 1
## number rows
length(dt[,1])

Keluaran:

## [1] 50

Fungsi matematika

Selain fungsi-fungsi pembantu umum, R memiliki serangkaian fungsi matematika yang beroperasi elemen demi elemen pada sebuah vektor.

Operator Deskripsi
abs (x) Mengambil nilai mutlak dari x
log(x,basis=y) Mengambil logaritma dari x dengan basis y; jika basis tidak ditentukan, mengembalikan logaritma natural
exp (x) Mengembalikan eksponensial dari x
sqrt (x) Mengembalikan akar kuadrat dari x
faktorial(x) Mengembalikan faktorial dari x (x!)
# sequence of number from 44 to 55 both including incremented by 1
x_vector <- seq(45,55, by = 1)
#logarithm
log(x_vector)

Keluaran:

##  [1] 3.806662 3.828641 3.850148 3.871201 3.891820 3.912023 3.931826
##  [8] 3.951244 3.970292 3.988984 4.007333
#exponential
exp(x_vector)
#squared root
sqrt(x_vector)

Keluaran:

##  [1] 6.708204 6.782330 6.855655 6.928203 7.000000 7.071068 7.141428
##  [8] 7.211103 7.280110 7.348469 7.416198
#factorial
factorial(x_vector)

Keluaran:

##  [1] 1.196222e+56 5.502622e+57 2.586232e+59 1.241392e+61 6.082819e+62
##  [6] 3.041409e+64 1.551119e+66 8.065818e+67 4.274883e+69 2.308437e+71
## [11] 1.269640e+73

Fungsi statistik

Fungsi matematika mengubah nilai, sedangkan fungsi statistik meringkasnya. Instalasi standar R berisi berbagai fungsi statistik. Dalam tutorial ini, kita akan melihat secara singkat fungsi-fungsi yang paling penting.

Fungsi statistik dasar

Operator Deskripsi
berarti(x) Rata-rata x
median(x) Median dari x
var(x) Varians x
SD(x) Simpangan baku x
skala(x) Skor standar (skor-z) x
kuantil(x) Kuartil dari x
ringkasan(x) Ringkasan x: mean, min, max dll.
speed <- dt$speed
speed
# Mean speed of cars dataset
mean(speed)

Keluaran:

## [1] 15.4
# Median speed of cars dataset
median(speed)

Keluaran:

## [1] 15
# Variance speed of cars dataset
var(speed)

Keluaran:

## [1] 27.95918
# Standard deviation speed of cars dataset
sd(speed)

Keluaran:

## [1] 5.287644
# Standardize vector speed of cars dataset		
head(scale(speed), 5)

Keluaran:

##           [,1]
## [1,] -2.155969
## [2,] -2.155969
## [3,] -1.588609
## [4,] -1.588609
## [5,] -1.399489
# Quantile speed of cars dataset
quantile(speed)

Keluaran:

##   0%  25%  50%  75% 100%
##    4   12   15   19   25
# Summary speed of cars dataset
summary(speed)

Keluaran:

##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
##     4.0    12.0    15.0    15.4    19.0    25.0

Hingga saat ini, kita telah mempelajari banyak fungsi bawaan R.

NoteBerhati-hatilah dengan kelas argumen, yaitu numerik, Boolean, atau string. Misalnya, jika kita perlu mengirimkan nilai string, kita perlu mengapit string tersebut dalam tanda kutip: โ€œABCโ€ .

Tulis fungsi di R

Dalam beberapa kesempatan, kita perlu menulis fungsi kita sendiri karena kita harus menyelesaikan tugas tertentu dan tidak ada fungsi siap pakai yang tersedia. Fungsi yang didefinisikan pengguna melibatkan... nama, argumen dan tubuh.

function.name <- function(arguments) 
{
    computations on the arguments	
    some other code
}		

Note: Praktik yang baik adalah memberi nama fungsi yang ditentukan pengguna berbeda dari fungsi bawaan. Ini menghindari kebingungan.

Satu fungsi argumen

Pada cuplikan berikutnya, kita mendefinisikan fungsi persegi sederhana. Fungsi ini menerima nilai dan mengembalikan kuadrat nilainya.

square_function<- function(n) 
{
  # compute the square of integer `n`
  n^2
}  
# calling the function and passing value 4
square_function(4)

Code Penjelasan

  • Fungsi tersebut diberi nama square_function; itu bisa disebut apapun yang kita inginkan.
  • Ia menerima argumen โ€œnโ€. Kami tidak menentukan jenis variabel sehingga pengguna dapat meneruskan bilangan bulat, vektor, atau matriks
  • Fungsi ini mengambil masukan โ€œnโ€ dan mengembalikan kuadrat masukan. Ketika Anda selesai menggunakan fungsi tersebut, kita dapat menghapusnya dengan fungsi rm().

# setelah Anda membuat fungsinya

rm(square_function)
square_function

Di konsol, kita dapat melihat pesan kesalahan :Error: object 'square_function' not found yang memberitahukan bahwa fungsi tersebut tidak ada.

Lingkungan Scoping

Di R, itu lingkungan Hidup adalah kumpulan objek seperti fungsi, variabel, data frame, dll.

R membuka lingkungan baru setiap kali RStudio dijalankan.

Lingkungan tingkat atas yang tersedia adalah lingkungan global, disebut R_GlobalEnv. Dan kita memiliki lingkungan lokal.

Kita dapat membuat daftar konten lingkungan saat ini.

ls(environment())

Keluaran

## [1] "diff_ts"         "dt"              "speed"           "square_function"
## [5] "ts"              "x"               "x_vector"

Anda dapat melihat semua variabel dan fungsi yang dibuat di R_GlobalEnv.

Daftar di atas akan berbeda untuk Anda tergantung pada kode historis yang Anda jalankan di RStudio.

Perhatikan bahwa n, argumen dari fungsi square_function tidak berada dalam lingkungan global ini.

Lingkungan baru dibuat untuk setiap fungsi. Pada contoh di atas, fungsi square_function() membuat lingkungan baru di dalam lingkungan global.

Untuk memperjelas perbedaan antara global ke lokal lingkungan, mari kita pelajari contoh berikut.

Fungsi ini mengambil nilai x sebagai argumen dan menambahkannya ke definisi y di luar dan di dalam fungsi

Fungsi f menggunakan variabel y yang didefinisikan dalam lingkungan global.

Fungsi f mengembalikan keluaran 15. Hal ini karena y didefinisikan dalam lingkungan global. Variabel apa pun yang ditentukan dalam lingkungan global dapat digunakan secara lokal. Variabel y memiliki nilai 10 selama semua pemanggilan fungsi dan dapat diakses kapan saja.

Mari kita lihat apa yang terjadi jika variabel y didefinisikan di dalam fungsi.

Kita perlu membuang `y` sebelum menjalankan kode ini menggunakan rm r

Fungsi f yang mendefinisikan y di dalam lingkungan lokalnya sendiri

Outputnya juga 15 ketika kita memanggil f(5) tetapi mengembalikan kesalahan ketika kita mencoba mencetak nilai y. Variabel y tidak ada dalam lingkungan global.

Terakhir, R menggunakan definisi variabel terbaru untuk dimasukkan ke dalam badan fungsi. Mari kita perhatikan contoh berikut:

R menggunakan definisi y terdalam di dalam badan fungsi.

R mengabaikan nilai y yang didefinisikan di luar fungsi karena kita secara eksplisit membuat variabel ay di dalam badan fungsi.

Fungsi multi argumen

Kita dapat menulis suatu fungsi dengan lebih dari satu argumen. Pertimbangkan fungsi yang disebut โ€œkaliโ€. Ini adalah fungsi langsung yang mengalikan dua variabel.

times <- function(x,y) {
  x*y
	}
times(2,4)

Keluaran:

## [1] 8

Kapan kita harus menulis fungsi?

Ilmuwan data perlu melakukan banyak tugas berulang. Sebagian besar waktu, kita menyalin dan menempel potongan kode secara berulang. Misalnya, normalisasi variabel sangat disarankan sebelum kita menjalankan suatu proses. Mesin belajar algoritma. Rumus untuk menormalkan suatu variabel adalah:

Rumus untuk Menormalkan Variabel

Kita sudah mengetahui cara menggunakan fungsi min() dan max() di R. Kita menggunakan perpustakaan tibble untuk membuat bingkai data. Tibble sejauh ini merupakan fungsi yang paling nyaman untuk membuat kumpulan data dari awal.

library(tibble)
# Create a data frame
data_frame <- tibble(  
  c1 = rnorm(50, 5, 1.5), 
  c2 = rnorm(50, 5, 1.5),    
  c3 = rnorm(50, 5, 1.5),    
)

Kita akan melanjutkan dalam dua langkah untuk menghitung fungsi yang dijelaskan di atas. Pada langkah pertama, kita akan membuat variabel bernama c1_norm yang merupakan penskalaan ulang dari c1. Pada langkah kedua, kita hanya menyalin dan menempel kode c1_norm dan menggantinya dengan c2 dan c3.

Detail fungsi dengan kolom c1:

Nominator: : data_frame$c1 -min(data_frame$c1))

Penyebut: maks(data_frame$c1)-min(data_frame$c1))

Oleh karena itu, kita dapat membaginya untuk mendapatkan nilai normalisasi kolom c1:

(data_frame$c1 -min(data_frame$c1))/(max(data_frame$c1)-min(data_frame$c1))

Kita dapat membuat c1_norm, c2_norm dan c3_norm:

Create c1_norm: rescaling of c1		
data_frame$c1_norm <- (data_frame$c1 -min(data_frame$c1))/(max(data_frame$c1)-min(data_frame$c1))
# show the first five values
head(data_frame$c1_norm, 5)

Keluaran:

## [1] 0.3400113 0.4198788 0.8524394 0.4925860 0.5067991

Berhasil. Kita bisa menyalin dan menempel

data_frame$c1_norm <- (data_frame$c1 -min(data_frame$c1))/(max(data_frame$c1)-min(data_frame$c1))

lalu ubah c1_norm menjadi c2_norm dan c1 menjadi c2. Kami melakukan hal yang sama untuk membuat c3_norm

data_frame$c2_norm <- (data_frame$c2 - min(data_frame$c2))/(max(data_frame$c2)-min(data_frame$c2))
data_frame$c3_norm <- (data_frame$c3 - min(data_frame$c3))/(max(data_frame$c3)-min(data_frame$c3))

Kami dengan sempurna mengubah skala variabel c1, c2 dan c3.

Namun, metode ini rentan terhadap kesalahan. Kita bisa saja menyalin dan lupa mengubah nama kolom setelah menempelkannya. Oleh karena itu, praktik yang baik adalah menulis fungsi setiap kali Anda perlu menempelkan kode yang sama lebih dari dua kali. Kita dapat menyusun ulang kode tersebut menjadi sebuah rumus dan memanggilnya setiap kali dibutuhkan. Untuk menulis fungsi kita sendiri, kita perlu memberikan:

  • Nama: normalisasi.
  • jumlah argumen: Kita hanya memerlukan satu argumen, yaitu kolom yang kita gunakan dalam perhitungan.
  • Badan: ini hanyalah rumus yang ingin kita kembalikan.

Kami akan melanjutkan langkah demi langkah untuk membuat fungsi normalisasi.

Langkah 1) Kita membuat pembilang, yaitu x โ€“ min(x). Di R, kita dapat menyimpan pembilang dalam variabel seperti ini:

nominator <- x-min(x)

Langkah 2) Kita menghitung penyebutnya: max(x) โ€“ min(x). Kita dapat meniru ide langkah 1 dan menyimpan perhitungannya dalam sebuah variabel:

denominator <- max(x)-min(x)

Langkah 3) Kami melakukan pembagian antara penyebut dan penyebut.

normalize <- nominator/denominator

Langkah 4) Untuk mengembalikan nilai ke fungsi pemanggil, kita perlu memasukkan normalisasi ke dalam return() untuk mendapatkan output dari fungsi tersebut.

return(normalize)

Langkah 5) Kita siap menggunakan fungsi tersebut dengan cara membungkusnya.ping semuanya di dalam tanda kurung.

normalize <- function(x){
  # step 1: create the nominator
  nominator <- x-min(x)
  # step 2: create the denominator
  denominator <- max(x)-min(x)
  # step 3: divide nominator by denominator
  normalize <- nominator/denominator
  # return the value
  return(normalize)
}

Mari kita uji fungsi kita dengan variabel c1:

normalize(data_frame$c1)

Ini bekerja dengan sempurna. Kami membuat fungsi pertama kami.

Fungsi adalah cara yang lebih komprehensif untuk melakukan tugas berulang. Kita dapat menggunakan rumus normalisasi pada kolom yang berbeda, seperti di bawah ini:

data_frame$c1_norm_function <- normalize (data_frame$c1)
data_frame$c2_norm_function <- normalize	(data_frame$c2)
data_frame$c3_norm_function <- normalize	(data_frame$c3)

Meskipun contohnya sederhana, kita dapat menyimpulkan kekuatan sebuah rumus. Kode di atas lebih mudah dibaca dan menghindari kesalahan yang muncul saat menyalin kode.

Fungsi dengan kondisi

Fungsi normalize() selalu melakukan hal yang sama. Terkadang, kita perlu menyertakan kondisi ke dalam suatu fungsi agar kode tersebut dapat menghasilkan keluaran yang berbeda.

Dalam tugas Machine Learning, kita perlu membagi kumpulan data antara kumpulan pelatihan dan kumpulan pengujian. Kumpulan kereta memungkinkan algoritme untuk belajar dari data. Untuk menguji performa model, kita dapat menggunakan set pengujian untuk mengembalikan ukuran performa. R tidak memiliki fungsi untuk membuat dua dataset. Kita dapat menulis fungsi kita sendiri untuk melakukan itu. Fungsi kita mengambil dua argumen dan disebut split_data(). Ide di baliknya sederhana, kita mengalikan panjang kumpulan data (yaitu jumlah observasi) dengan 0.8. Misalnya, jika kita ingin membagi dataset 80/20, dan dataset kita berisi 100 baris, maka fungsi kita akan mengalikan 0.8*100 = 80. 80 baris akan dipilih untuk menjadi data pelatihan kita.

Kami akan menggunakan kumpulan data kualitas udara untuk menguji fungsi yang ditentukan pengguna. Kumpulan data kualitas udara memiliki 153 baris. Kita bisa melihatnya dengan kode di bawah ini:

nrow(airquality)

Keluaran:

## [1] 153

Kami akan melanjutkan sebagai berikut:

split_data <- function(df, train = TRUE)
Arguments:
-df: Define the dataset
-train: Specify if the function returns the train set or test set. By default, set to TRUE

Fungsi kita memiliki dua argumen. Argumen train adalah parameter Boolean. Jika diatur ke TRUE, fungsi kita membuat dataset train, jika tidak, fungsi kita membuat dataset test.

Kita dapat melanjutkan seperti yang kita lakukan dengan fungsi normalize(). Kita menulis kode seolah-olah itu hanya kode satu kali dan kemudian membungkus semuanya dengan kondisi ke dalam badan fungsi untuk membuat fungsi tersebut.

Langkah 1:

Kita perlu menghitung panjang kumpulan data. Hal ini dilakukan dengan fungsi sekarang(). Sekarang mengembalikan jumlah total baris dalam kumpulan data. Kami menyebutnya panjang variabel.

length<- nrow(airquality)
length

Keluaran:

## [1] 153

Langkah 2:

Kami mengalikan panjangnya dengan 0.8. Ini akan mengembalikan jumlah baris yang akan dipilih. Seharusnya 153*0.8 = 122.4

total_row <- length*0.8
total_row

Keluaran:

## [1] 122.4

Kami ingin memilih 122 baris di antara 153 baris dalam kumpulan data kualitas udara. Kami membuat daftar yang berisi nilai dari 1 hingga total_row. Kami menyimpan hasilnya dalam variabel yang disebut split

split <- 1:total_row
split[1:5]

Keluaran:

## [1] 1 2 3 4 5

split memilih 122 baris pertama dari kumpulan data. Misalnya, kita dapat melihat bahwa pemisahan variabel mengumpulkan nilai 1, 2, 3, 4, 5 dan seterusnya. Nilai-nilai ini akan menjadi indeks ketika kita memilih baris yang akan dikembalikan.

Langkah 3:

Kita perlu memilih baris dalam kumpulan data kualitas udara berdasarkan nilai yang disimpan dalam variabel terpisah. Ini dilakukan seperti ini:

train_df <- airquality[split, ] 
head(train_df)

Keluaran:

##[1]    Ozone Solar.R Wind Temp Month Day
##[2]  51    13     137 10.3   76     6  20
##[3]  15    18      65 13.2   58     5  15
##[4]  64    32     236  9.2   81     7   3
##[5]  27    NA      NA  8.0   57     5  27
##[6]  58    NA      47 10.3   73     6  27
##[7]  44    23     148  8.0   82     6  13

Langkah 4:

Kita dapat membuat kumpulan data pengujian dengan menggunakan baris yang tersisa, 123:153. Hal ini dilakukan dengan menggunakan โ€“ di depan split.

test_df <- airquality[-split, ] 
head(test_df)

Keluaran:

##[1] Ozone Solar.R Wind Temp Month Day
##[2]  123    85     188  6.3   94     8  31
##[3]  124    96     167  6.9   91     9   1
##[4]  125    78     197  5.1   92     9   2
##[5]  126    73     183  2.8   93     9   3
##[6]  127    91     189  4.6   93     9   4
##[7]  128    47      95  7.4   87     9   5

Langkah 5:

Kita dapat menciptakan kondisi di dalam badan fungsi. Ingat, kita memiliki argumen train yang merupakan set Boolean ke TRUE secara default untuk mengembalikan set kereta. Untuk membuat kondisi, kami menggunakan sintaks if:

  if (train ==TRUE){ 
    train_df <- airquality[split, ] 
      return(train)		
  } else {
    test_df <- airquality[-split, ] 
      return(test)		
  }

Ini dia, kita bisa menulis fungsinya. Kita hanya perlu mengubah kualitas udara menjadi df karena kita ingin mencoba fungsinya ke mana pun bingkai data, tidak hanya kualitas udara:

split_data <- function(df, train = TRUE){
  length<- nrow(df)
  total_row <- length *0.8
  split <- 1:total_row
  if (train ==TRUE){ 
    train_df <- df[split, ] 
      return(train_df)		
  } else {
    test_df <- df[-split, ] 
      return(test_df)		
  }
}

Mari kita coba fungsi kita pada dataset kualitas udara. Kita seharusnya memiliki satu set data pelatihan dengan 122 baris dan satu set data uji dengan 31 baris.

train <- split_data(airquality, train = TRUE)
dim(train)

Keluaran:

## [1] 122   6
test <- split_data(airquality, train = FALSE)
dim(test)

Keluaran:

## [1] 31  6

Pertanyaan Umum Demo Slot

Tetapkan nilai dalam definisi, misalnya function(df, train = TRUE). Jika pemanggil menghilangkan argumen tersebut, R akan menggunakan nilai default. Nilai default dievaluasi secara tunda (lazily), sehingga satu nilai default bahkan dapat merujuk ke argumen lain dari fungsi yang sama.

Ya. Sebuah fungsi dapat memanggil dirinya sendiri selama ada perintah berhenti.ping Kondisi mengakhiri rantai โ€” misalnya, faktorial yang mengembalikan 1 ketika n mencapai 1. Rekursi yang dalam dapat mencapai batas penestingan ekspresi, sehingga iterasi seringkali lebih aman.

Tidak. R secara otomatis mengembalikan nilai dari ekspresi yang terakhir dievaluasi, itulah sebabnya square_function() berfungsi tanpa return(). Gunakan return() ketika diperlukan penghentian lebih awal, atau ketika hasil eksplisit membuat fungsi lebih mudah dibaca.

R mencocokkan berdasarkan nama persis terlebih dahulu, kemudian berdasarkan nama sebagian, lalu berdasarkan posisi untuk sisanya. Penamaan argumen secara eksplisit, seperti pada seq(45, 55, by = 1), menjaga agar panggilan tetap mudah dibaca dan aman dari pengurutan ulang yang tidak disengaja.

Fungsi yang dibuat tanpa diberi nama, biasanya langsung diteruskan ke sapply() atau lapply(). R 4.1 menambahkan bentuk garis miring terbalik yang disingkat, sehingga \(x) x^2 melakukan pekerjaan yang sama dengan function(x) x^2 dengan cara yang jauh lebih sederhana.ping.

Definisi baru tersebut menyembunyikan fungsi bawaan di dalam lingkungan tersebut, sehingga memanggil length() dapat menjalankan versi Anda alih-alih versi dasar. Hapus salinan tersebut dengan rm(), atau pilih nama yang berbeda sejak awal.

Asisten AI menyusun kerangka fungsi dari komentar berbahasa Inggris sederhana, menyarankan nilai default argumen yang masuk akal, dan menghasilkan pengujian unit. Selalu jalankan kode yang dihasilkan terhadap data nyata, karena fungsi R yang tampak masuk akal masih dapat mengembalikan nilai yang salah secara diam-diam.

Ya. RStudio Desktop versi 2023.09.0 dan yang lebih baru menyertakan opsi untuk mengaktifkannya secara sukarela. Kopilot GitHub integrasi. Ini melengkapi isi fungsi dari komentar, tetapi tinjau setiap saran, karena tidak dapat melihat data Anda.

Ringkaslah postingan ini dengan: