ฟังก์ชั่นในการเขียนโปรแกรม R พร้อมตัวอย่าง

ฟังก์ชั่นใน R คืออะไร?

A ฟังก์ชันในสภาพแวดล้อมการเขียนโปรแกรมคือชุดคำสั่ง โปรแกรมเมอร์สร้างฟังก์ชันที่ควรหลีกเลี่ยง ทำซ้ำ งานเดียวกันหรือลดลง ความซับซ้อน

ฟังก์ชันควรจะเป็น

  • เขียนเพื่อดำเนินงานที่ระบุ
  • อาจมีหรือไม่มีข้อโต้แย้งก็ได้
  • มีร่างกาย
  • อาจหรืออาจไม่ส่งคืนค่าตั้งแต่หนึ่งค่าขึ้นไป

วิธีการทั่วไปสำหรับฟังก์ชันคือการใช้ส่วนอาร์กิวเมนต์เป็น ปัจจัยการผลิต, ให้อาหาร ร่างกาย ส่วนหนึ่งและในที่สุดก็กลับมา เอาท์พุตโครงสร้างของฟังก์ชันเป็นดังต่อไปนี้:

function (arglist)  {
  #Function body
}

R ฟังก์ชั่นในตัวที่สำคัญ

มีฟังก์ชันในตัวมากมายใน R โดย R จะจับคู่พารามิเตอร์อินพุตของคุณกับอาร์กิวเมนต์ของฟังก์ชัน ไม่ว่าจะตามค่าหรือตามตำแหน่ง จากนั้นจึงดำเนินการกับเนื้อหาของฟังก์ชัน อาร์กิวเมนต์ของฟังก์ชันสามารถมีค่าเริ่มต้นได้: หากคุณไม่ได้ระบุอาร์กิวเมนต์เหล่านี้ R จะใช้ค่าเริ่มต้น
หมายเหตุ:
คุณสามารถดูซอร์สโค้ดของฟังก์ชันได้โดยการเรียกใช้ชื่อของฟังก์ชันนั้นในคอนโซล

R ฟังก์ชั่นในตัวที่สำคัญ

เราจะเห็นการทำงานสามกลุ่ม

  • ฟังก์ชั่นทั่วไป
  • ฟังก์ชันคณิตศาสตร์
  • ฟังก์ชันทางสถิติ

ฟังก์ชั่นทั่วไป

เราคุ้นเคยกับฟังก์ชันทั่วไป เช่น ฟังก์ชัน cbind(), rbind(), range(), sort(), order() อยู่แล้ว ฟังก์ชันเหล่านี้แต่ละฟังก์ชันมีงานเฉพาะที่ต้องใช้ตัวแปรในการส่งคืนผลลัพธ์ ฟังก์ชันสำคัญต่อไปนี้คือฟังก์ชันที่ต้องรู้

ฟังก์ชันต่าง()

ถ้าคุณทำงานเกี่ยวกับ อนุกรมเวลาคุณต้องนิ่งซีรีย์ด้วยการเอาพวกมัน ค่าความล่าช้า. กระบวนการนิ่ง ยอมให้ค่าเฉลี่ย ความแปรปรวน และความสัมพันธ์อัตโนมัติคงที่ตลอดเวลา ซึ่งจะช่วยปรับปรุงการทำนายอนุกรมเวลาเป็นหลัก สามารถทำได้ง่ายๆ ด้วยฟังก์ชัน diff() เราสามารถสร้างข้อมูลอนุกรมเวลาแบบสุ่มโดยมีแนวโน้ม จากนั้นใช้ฟังก์ชัน diff() เพื่อหยุดอนุกรมนั้น ฟังก์ชัน diff() ยอมรับหนึ่งอาร์กิวเมนต์ ซึ่งเป็นเวกเตอร์ และส่งคืนความแตกต่างที่ล่าช้าและวนซ้ำที่เหมาะสม

หมายเหตุ:เรามักจะต้องสร้างข้อมูลแบบสุ่ม แต่เพื่อการเรียนรู้และการเปรียบเทียบ เราต้องการให้ตัวเลขเหมือนกันในทุกเครื่อง เพื่อให้แน่ใจว่าเราสร้างข้อมูลเดียวกัน เราจึงใช้ฟังก์ชัน set.seed() โดยมีค่า 123 ที่กำหนดได้ ฟังก์ชัน set.seed() สร้างขึ้นโดยใช้กระบวนการสร้างตัวเลขสุ่มเทียม ซึ่งทำให้คอมพิวเตอร์สมัยใหม่ทุกเครื่องมีลำดับตัวเลขเหมือนกัน หากเราไม่ใช้ฟังก์ชัน set.seed() เราก็จะมีลำดับตัวเลขที่แตกต่างกัน

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')

ฟังก์ชั่นความแตกต่าง ()

ความยาว () ฟังก์ชัน

ในหลายกรณีเราต้องการทราบว่า ความยาว ของเวกเตอร์สำหรับการคำนวณหรือใช้ในลูป for ฟังก์ชัน length() นับจำนวนแถวในเวกเตอร์ x โค้ดต่อไปนี้จะนำเข้าชุดข้อมูลรถยนต์และส่งคืนจำนวนแถว

หมายเหตุ: length() ส่งคืนจำนวนองค์ประกอบในเวกเตอร์ หากฟังก์ชันถูกส่งผ่านไปยังเมทริกซ์หรือกรอบข้อมูล จำนวนคอลัมน์จะถูกส่งกลับ

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

Output:

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

Output:

## [1] 50

ฟังก์ชันทางคณิตศาสตร์

R มีอาร์เรย์ของฟังก์ชันทางคณิตศาสตร์

OperaTor Descriptไอออน
เอบีเอส (x) รับค่าสัมบูรณ์ของ x
บันทึก(x,ฐาน=y) รับลอการิทึมของ x พร้อมฐาน y ถ้าไม่ได้ระบุฐาน จะส่งกลับค่าลอการิทึมธรรมชาติ
ประสบการณ์(x) ส่งกลับเลขชี้กำลังของ x
sqrt (x) ส่งคืนค่ารากที่สองของ x
แฟกทอเรียล(x) ส่งกลับค่าแฟกทอเรียลของ 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)

Output:

##  [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)

Output:

##  [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)

Output:

##  [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

ฟังก์ชันทางสถิติ

การติดตั้งมาตรฐาน R ประกอบด้วยฟังก์ชันทางสถิติที่หลากหลาย ในบทช่วยสอนนี้ เราจะดูฟังก์ชันที่สำคัญที่สุดโดยย่อ..

ฟังก์ชันทางสถิติพื้นฐาน

OperaTor Descriptไอออน
ค่าเฉลี่ย(x) ค่าเฉลี่ยของ x
ค่ามัธยฐาน(x) ค่ามัธยฐานของ x
วาร์(x) ความแปรปรวนของ x
เอสดี(x) ค่าเบี่ยงเบนมาตรฐานของ x
ขนาด(x) คะแนนมาตรฐาน (z-score) ของ x
ปริมาณ(x) ควอไทล์ของ x
สรุป(x) สรุป x: ค่าเฉลี่ย, ต่ำสุด, สูงสุด ฯลฯ
speed <- dt$speed
speed
# Mean speed of cars dataset
mean(speed)

Output:

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

Output:

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

Output:

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

Output:

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

Output:

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

Output:

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

Output:

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

จนถึงจุดนี้ เราได้เรียนรู้ฟังก์ชัน R ในตัวมากมายแล้ว

หมายเหตุ: ระวังคลาสของอาร์กิวเมนต์ เช่น ตัวเลข บูลีน หรือสตริง ตัวอย่างเช่น หากเราต้องส่งค่าสตริง เราจะต้องใส่สตริงในเครื่องหมายคำพูด: “ABC”

เขียนฟังก์ชันใน R

ในบางครั้งเราจำเป็นต้องเขียนฟังก์ชันของเราเองเพราะเราต้องทำงานเฉพาะอย่างให้สำเร็จและไม่มีฟังก์ชันสำเร็จรูปอยู่ ฟังก์ชันที่ผู้ใช้กำหนดเกี่ยวข้องกับ ชื่อ, ข้อโต้แย้ง และ ร่างกาย.

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

หมายเหตุ: แนวปฏิบัติที่ดีคือการตั้งชื่อฟังก์ชันที่ผู้ใช้กำหนดแตกต่างจากฟังก์ชันในตัว มันหลีกเลี่ยงความสับสน

ฟังก์ชันอาร์กิวเมนต์หนึ่งรายการ

ในตัวอย่างถัดไป เราจะกำหนดฟังก์ชันกำลังสองอย่างง่าย ฟังก์ชันยอมรับค่าและส่งคืนค่ากำลังสองของค่า

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

คำอธิบายรหัส

  • ฟังก์ชันนี้มีชื่อว่า square_function; จะเรียกว่าอะไรก็ได้ที่เราต้องการ
  • ได้รับการโต้แย้ง "n" เรา ไม่ได้ระบุประเภทของตัวแปรเพื่อให้ผู้ใช้สามารถส่งผ่านจำนวนเต็ม เวกเตอร์ หรือเมทริกซ์ได้
  • ฟังก์ชันรับอินพุต “n” และส่งกลับค่ากำลังสองของอินพุต เมื่อคุณใช้ฟังก์ชันนี้เสร็จแล้ว เราสามารถลบมันออกได้ด้วยฟังก์ชัน rm()

# หลังจากที่คุณสร้างฟังก์ชันแล้ว

rm(square_function)
square_function

บนคอนโซล เราจะเห็นข้อความแสดงข้อผิดพลาด :Error: object 'square_function' not found บอกว่าไม่มีฟังก์ชันอยู่

การกำหนดขอบเขตสิ่งแวดล้อม

ใน R สิ่งแวดล้อม คือ ชุด ของวัตถุ เช่น ฟังก์ชัน ตัวแปร กรอบข้อมูล ฯลฯ

R เปิดสภาพแวดล้อมทุกครั้งที่ Rstudio ได้รับแจ้ง

สภาพแวดล้อมระดับบนสุดที่มีอยู่คือ สิ่งแวดล้อมโลกเรียกว่า R_GlobalEnv และเรามี สภาพแวดล้อมในท้องถิ่น

เราสามารถแสดงรายการเนื้อหาของสภาพแวดล้อมปัจจุบันได้

ls(environment())

เอาท์พุต

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

คุณสามารถดูตัวแปรและฟังก์ชันทั้งหมดที่สร้างขึ้นใน R_GlobalEnv

รายการด้านบนจะแตกต่างกันไปสำหรับคุณตามโค้ดประวัติที่คุณเรียกใช้ใน R Studio

โปรดทราบว่า n อาร์กิวเมนต์ของฟังก์ชัน square_function คือ ไม่ใช่ในสภาพแวดล้อมของโลกนี้.

A ใหม่ สภาพแวดล้อมถูกสร้างขึ้นสำหรับแต่ละฟังก์ชัน ในตัวอย่างข้างต้น ฟังก์ชัน square_function() สร้างสภาพแวดล้อมใหม่ภายในสภาพแวดล้อมโกลบอล

เพื่อชี้แจงความแตกต่างระหว่าง ทั่วโลก และ สิ่งแวดล้อมท้องถิ่นมาศึกษาตัวอย่างต่อไปนี้กัน

ฟังก์ชันเหล่านี้รับค่า x เป็นอาร์กิวเมนต์และเพิ่มลงใน y กำหนดภายนอกและภายในฟังก์ชัน

การกำหนดขอบเขตสิ่งแวดล้อม

ฟังก์ชัน f ส่งกลับเอาต์พุต 15 เนื่องจาก y ถูกกำหนดไว้ในสภาพแวดล้อมโกลบอล ตัวแปรใดๆ ที่กำหนดไว้ในสภาพแวดล้อมส่วนกลางสามารถใช้ได้ภายในเครื่อง ตัวแปร y มีค่าเป็น 10 ในระหว่างการเรียกใช้ฟังก์ชันทั้งหมด และสามารถเข้าถึงได้ตลอดเวลา

เรามาดูกันว่าเกิดอะไรขึ้นถ้าตัวแปร y ถูกกำหนดไว้ภายในฟังก์ชัน

เราจำเป็นต้องปล่อย `y` ก่อนที่จะรันโค้ดนี้โดยใช้ rm r

การกำหนดขอบเขตสิ่งแวดล้อม

ผลลัพธ์จะเป็น 15 เช่นกันเมื่อเราเรียก f(5) แต่ส่งคืนข้อผิดพลาดเมื่อเราพยายามพิมพ์ค่า y ตัวแปร y ไม่ได้อยู่ในสภาพแวดล้อมโกลบอล

ในที่สุด R จะใช้คำจำกัดความของตัวแปรล่าสุดเพื่อส่งผ่านภายในเนื้อหาของฟังก์ชัน มาพิจารณาตัวอย่างต่อไปนี้:

การกำหนดขอบเขตสิ่งแวดล้อม

R ละเว้นค่า y ที่กำหนดไว้นอกฟังก์ชันเนื่องจากเราสร้างตัวแปร ay ไว้อย่างชัดเจนภายในเนื้อหาของฟังก์ชัน

ฟังก์ชันหลายข้อโต้แย้ง

เราสามารถเขียนฟังก์ชันที่มีมากกว่าหนึ่งอาร์กิวเมนต์ได้ พิจารณาฟังก์ชันที่เรียกว่า "เวลา" เป็นฟังก์ชันตรงไปตรงมาคูณตัวแปรสองตัว

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

Output:

## [1] 8

เมื่อใดที่เราควรเขียนฟังก์ชัน?

นักวิทยาศาสตร์ข้อมูลจำเป็นต้องทำงานซ้ำๆ มากมาย โดยส่วนใหญ่แล้ว เราจะคัดลอกและวางโค้ดชิ้นต่างๆ ซ้ำๆ ตัวอย่างเช่น แนะนำให้ทำให้ตัวแปรเป็นมาตรฐานก่อนที่เราจะรัน เรียนรู้เครื่อง อัลกอริทึม สูตรเพื่อทำให้ตัวแปรเป็นมาตรฐานคือ:

สูตรเพื่อทำให้ตัวแปรเป็นมาตรฐาน

เรารู้วิธีใช้ฟังก์ชัน min() และ max() ใน R แล้ว เราใช้ไลบรารี tibble เพื่อสร้าง data frame Tibble เป็นฟังก์ชันที่สะดวกที่สุดในการสร้างชุดข้อมูลตั้งแต่เริ่มต้น

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),    
)

เราจะดำเนินการในสองขั้นตอนเพื่อคำนวณฟังก์ชันที่อธิบายไว้ข้างต้น ในขั้นตอนแรก เราจะสร้างตัวแปรชื่อ c1_norm ซึ่งเป็นการปรับขนาดของ c1 ในขั้นตอนที่สอง เราเพียงคัดลอกและวางโค้ดของ c1_norm แล้วเปลี่ยนด้วย c2 และ c3

รายละเอียดของฟังก์ชันที่มีคอลัมน์ c1:

ผู้เสนอชื่อ: : data_frame$c1 -min(data_frame$c1))

ตัวส่วน: สูงสุด(data_frame$c1)-นาที(data_frame$c1))

ดังนั้นเราจึงสามารถแบ่งพวกมันเพื่อให้ได้ค่ามาตรฐานของคอลัมน์ c1:

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

เราสามารถสร้าง c1_norm, c2_norm และ 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)

Output:

## [1] 0.3400113 0.4198788 0.8524394 0.4925860 0.5067991

มันได้ผล. เราสามารถคัดลอกและวางได้

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

จากนั้นเปลี่ยน c1_norm เป็น c2_norm และ c1 เป็น c2 เราทำเช่นเดียวกันเพื่อสร้าง 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))

เราปรับขนาดตัวแปร c1, c2 และ c3 ได้อย่างสมบูรณ์แบบ

อย่างไรก็ตามวิธีนี้มีแนวโน้มที่จะผิดพลาดได้ เราสามารถคัดลอกและลืมเปลี่ยนชื่อคอลัมน์ได้หลังจากวาง ดังนั้นแนวทางปฏิบัติที่ดีคือการเขียนฟังก์ชันในแต่ละครั้งที่คุณต้องการวางโค้ดเดียวกันมากกว่าสองครั้ง เราสามารถจัดเรียงโค้ดใหม่ให้เป็นสูตรและเรียกมันได้ทุกเมื่อที่ต้องการ ในการเขียนฟังก์ชันของเราเอง เราต้องให้:

  • ชื่อ: ทำให้เป็นมาตรฐาน
  • จำนวนอาร์กิวเมนต์: เราต้องการเพียงอาร์กิวเมนต์เดียวเท่านั้น ซึ่งเป็นคอลัมน์ที่เราใช้ในการคำนวณ
  • ร่างกาย: นี่เป็นเพียงสูตรที่เราต้องการคืน

เราจะดำเนินการทีละขั้นตอนเพื่อสร้างฟังก์ชันที่ทำให้เป็นมาตรฐาน

ขั้นตอน 1) เราสร้าง ผู้เสนอชื่อ, ซึ่งเป็น . ใน R เราสามารถเก็บ nominator ไว้ในตัวแปรดังนี้:

nominator <- x-min(x)

ขั้นตอน 2) เราคำนวณ ตัวส่วน: - เราสามารถจำลองแนวคิดของขั้นตอนที่ 1 และจัดเก็บการคำนวณไว้ในตัวแปรได้:

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

ขั้นตอน 3) เราทำการหารระหว่างตัวเสนอชื่อและตัวส่วน

normalize <- nominator/denominator

ขั้นตอน 4) ในการคืนค่าให้กับฟังก์ชันที่เรียกใช้ เราต้องผ่านการทำให้เป็นมาตรฐานภายใน return() เพื่อรับเอาต์พุตของฟังก์ชัน

return(normalize)

ขั้นตอน 5) เราพร้อมที่จะใช้ฟังก์ชันโดยห่อทุกอย่างไว้ในวงเล็บ

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)
}

มาทดสอบฟังก์ชันของเรากับตัวแปร c1:

normalize(data_frame$c1)

มันทำงานได้อย่างสมบูรณ์แบบ เราสร้างฟังก์ชันแรกของเรา

ฟังก์ชันต่างๆ เป็นวิธีการทำงานซ้ำๆ ที่ครอบคลุมมากขึ้น เราสามารถใช้สูตรทำให้เป็นมาตรฐานกับคอลัมน์ต่างๆ ได้ ดังตัวอย่างด้านล่าง:

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)

แม้ว่าตัวอย่างจะเรียบง่าย แต่เราก็สามารถอนุมานพลังของสูตรได้ โค้ดด้านบนอ่านง่ายกว่าและโดยเฉพาะอย่างยิ่งหลีกเลี่ยงข้อผิดพลาดเมื่อวางโค้ด

ฟังก์ชั่นมีเงื่อนไข

บางครั้งเราจำเป็นต้องรวมเงื่อนไขไว้ในฟังก์ชันเพื่อให้โค้ดส่งคืนเอาต์พุตที่แตกต่างกัน

ในงาน Machine Learning เราจำเป็นต้องแบ่งชุดข้อมูลระหว่างชุดรถไฟและชุดทดสอบ ชุดรถไฟอนุญาตให้อัลกอริธึมเรียนรู้จากข้อมูล เพื่อทดสอบประสิทธิภาพของโมเดลของเรา เราสามารถใช้ชุดทดสอบเพื่อส่งคืนการวัดประสิทธิภาพ R ไม่มีฟังก์ชันในการสร้างชุดข้อมูลสองชุด เราสามารถเขียนฟังก์ชันของเราเองเพื่อทำสิ่งนั้นได้ ฟังก์ชันของเรารับอาร์กิวเมนต์สองตัวและเรียกว่า split_data() แนวคิดเบื้องหลังนั้นเรียบง่าย เราคูณความยาวของชุดข้อมูล (เช่น จำนวนการสังเกต) ด้วย 0.8 ตัวอย่างเช่น หากเราต้องการแยกชุดข้อมูล 80/20 และชุดข้อมูลของเรามี 100 แถว ฟังก์ชันของเราจะคูณ 0.8*100 = 80 โดยจะมีการเลือก 80 แถวให้เป็นข้อมูลการฝึกของเรา

เราจะใช้ชุดข้อมูลคุณภาพอากาศเพื่อทดสอบฟังก์ชันที่ผู้ใช้กำหนด ชุดข้อมูลคุณภาพอากาศมี 153 แถว เราสามารถดูได้ด้วยรหัสด้านล่าง:

nrow(airquality)

Output:

## [1] 153

เราจะดำเนินการดังนี้:

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

ฟังก์ชันของเรามีอาร์กิวเมนต์สองตัว อาร์กิวเมนต์ train เป็นพารามิเตอร์บูลีน ถ้าตั้งค่าเป็น TRUE ฟังก์ชันของเราจะสร้างชุดข้อมูลการฝึก มิฉะนั้น ฟังก์ชันจะสร้างชุดข้อมูลการทดสอบ

เราสามารถดำเนินการได้เหมือนกับที่เราทำฟังก์ชัน Normalise() เราเขียนโค้ดราวกับว่ามันเป็นโค้ดเพียงครั้งเดียว จากนั้นจึงรวมทุกอย่างที่มีเงื่อนไขเข้าไปในเนื้อความเพื่อสร้างฟังก์ชัน

ขั้นตอนที่ 1:

เราจำเป็นต้องคำนวณความยาวของชุดข้อมูล ทำได้โดยใช้ฟังก์ชัน nrow() Nrow ส่งคืนจำนวนแถวทั้งหมดในชุดข้อมูล เราเรียกความยาวผันแปร

length<- nrow(airquality)
length

Output:

## [1] 153

ขั้นตอนที่ 2:

เราคูณความยาวด้วย 0.8 มันจะส่งคืนจำนวนแถวที่เลือก ควรเป็น 153*0.8 = 122.4

total_row <- length*0.8
total_row

Output:

## [1] 122.4

เราต้องการเลือก 122 แถวจาก 153 แถวในชุดข้อมูลคุณภาพอากาศ เราสร้างรายการที่มีค่าตั้งแต่ 1 ถึง Total_row เราเก็บผลลัพธ์ไว้ในตัวแปรที่เรียกว่า split

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

Output:

## [1] 1 2 3 4 5

split เลือก 122 แถวแรกจากชุดข้อมูล ตัวอย่างเช่น เราจะเห็นว่าการแยกตัวแปรของเรารวบรวมค่า 1, 2, 3, 4, 5 และอื่นๆ ค่าเหล่านี้จะเป็นดัชนีเมื่อเราจะเลือกแถวที่จะส่งคืน

ขั้นตอนที่ 3:

เราจำเป็นต้องเลือกแถวในชุดข้อมูลคุณภาพอากาศตามค่าที่เก็บไว้ในตัวแปรแยก ทำเช่นนี้:

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

Output:

##[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

ขั้นตอนที่ 4:

เราสามารถสร้างชุดข้อมูลทดสอบได้โดยใช้แถวที่เหลือ 123:153 ทำได้โดยใช้ – หน้าแยก

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

Output:

##[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

ขั้นตอนที่ 5:

เราสามารถสร้างเงื่อนไขภายในเนื้อหาของฟังก์ชันได้ โปรดจำไว้ว่า เรามีรถไฟอาร์กิวเมนต์ที่เป็นบูลีนที่ตั้งค่าเป็น TRUE โดยค่าเริ่มต้นเพื่อส่งคืนชุดรถไฟ ในการสร้างเงื่อนไข เราใช้ไวยากรณ์ if:

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

เท่านี้เราก็สามารถเขียนฟังก์ชันได้ เราจำเป็นต้องเปลี่ยนคุณภาพอากาศเป็น df เท่านั้น เพราะเราต้องการลองใช้ฟังก์ชันของเราเป็นค่าใดๆ กรอบข้อมูลไม่เพียงแต่คุณภาพอากาศ:

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)		
  }
}

เรามาลองใช้ฟังก์ชันของเรากับชุดข้อมูลคุณภาพอากาศกันดีกว่า เราควรมีชุดฝึก 122 ชุดมี 31 แถว และชุดทดสอบมี XNUMX แถว

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

Output:

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

Output:

## [1] 31  6