สวัสดีค้าาบ วันนี้แอดขอพาขึ้นเนื้อหา R Programming เนื้อหานี้สำหรับคนที่มีพื้นฐานแล้วนะครับ
Loop หรือ “การวนลูป” คือโครงสร้างที่ช่วยให้เราสามารถทำงานเดิมซ้ำๆซ้อนกันได้โดยไม่ต้องเขียนโค้ดซ้ำหลายครั้ง มีประโยชน์มากเมื่อต้องจัดการข้อมูลจำนวนมากหรือทำงานซ้ำๆ ในลักษณะเดียวกัน
ภาษา R มีรูปแบบการใช้งาน Loop หลักๆ อยู่ 3 แบบ ได้แก่:
- For Loop
- While Loop
- Repeat Loop
และแถม ฟังกช์ 1 ตัว ที่แตกต่าง Functional Loops (เป็นฟังก์ชันที่อยู่ใน packet Purr นะครับ)
แอดจะพามาดูตัวอย่างการใช้งานของแต่ละแบบพร้อมคำอธิบายนะครับ
1. For Loop
For Loop ใช้สำหรับการวนลูปที่จำนวนรอบถูกกำหนดไว้อย่างชัดเจน เช่น การวนลูปผ่านตัวเลขในช่วงที่กำหนด หรือการวนลูปผ่านสมาชิกในเวกเตอร์ มาลองดูตัวอย่างคำสั่งกันครับ
ตัวอย่างคำสั่งการใช้ For loop
ตัวอย่างที่ 1: วนลูปตัวเลข 1 ถึง 5
for (i in 1:5) {
print(i)
}
ผลลัพธ์:
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
อธิบายง่าย
เขียน For ป้อนคำสั่งลงไป ตัว i สามารถเขียนเป็นตัวไรก็ได้ คล้ายเป็นตัวแปรสำหรับ Function Loop
1 : 5 เราจะรันคำสั่งจนถึง 5
ตัวอย่างที่ 2: วนลูปกับสมาชิกในเวกเตอร์
vec <- c("Apple", "Banana", "Cherry")
for (fruit in vec) {
print(fruit)
}
ผลลัพธ์:
[1] "Apple"
[1] "Banana"
[1] "Cherry"
อธิบายง่าย
เก็บข้อมูลไว้ในตัวแปร vec
ตั้งชื่อ loop เป็น fruit
print fruit ออกมา
ตัวอย่างที่ 3: วนลูปพร้อมเงื่อนไขในลูป
for (i in 1:10) {
if (i %% 2 == 0) {
print(paste(i, "is even"))
}
}
ผลลัพธ์:
[1] "2 is even"
[1] "4 is even"
[1] "6 is even"
[1] "8 is even"
[1] "10 is even"
อธิบายง่าย
สร้างตัวแปร Loop มาชื่อ i และตั้งให้ Loop ทั้งหมด 10 ครั้ง 1 ถึง 10
เขียนฟังก์ชัน IF เพื่อให้ i หาร 2 ลงตัว ถ้าลงตัวจะเป็นเลขคู่ even
Print ออกมาและใช้คำสั่ง paste เพื่อให้ i และ ข้อความในช่อง ” ” รวมกัน และ แสดงผลออกมา
2. While Loop
While Loop ใช้สำหรับการวนลูปที่จำนวนรอบไม่แน่นอน แต่จะวนไปเรื่อยๆ จนกว่าจะถึงเงื่อนไขที่กำหนด
ตัวอย่างคำสั่งการใช้ While Loop
ตัวอย่างที่ 1: วนลูปจนค่าถึง 5
x <- 1
while (x <= 5) {
print(x)
x <- x + 1
}
ผลลัพธ์:
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
อธิบายง่าย
กำหนดตัวแปร x = 1 ( ตั้งต้น ไว้ คือ 1 )
สร้าง Loop while ถ้า x น้อยกว่าหรือเท่ากับ 5 ให้ทำซ้ำๆไปจนกว่าเงื่อนไขนี้จะเป็นเท็จ (มากกว่า 5 แล้วจะหยุดทำงาน )
สร้างคำสั่งสำหรับ จบลูป print ค่า x ออกมา และเพิ่มค่า x + 1 ในแต่ละรอบ
ตัวอย่างที่ 2: ใช้ร่วมกับเงื่อนไขซับซ้อน
x <- 10
while (x > 0) {
print(x)
x <- x - 2
}
ผลลัพธ์:
[1] 10
[1] 8
[1] 6
[1] 4
[1] 2
อธิบายง่าย
กำหนดตัวแปร x = 10 ( ตั้งต้น ไว้ คือ 10 )
สร้าง Loop while ถ้า x มากกว่า 0 ให้รันคำสั่งไปเรื่อยๆ จนกว่า x น้อยกว่าหรือเท่ากับ 0
สร้างคำสั่งสำหรับ จบลูป print ค่า x ออกมา และลดค่า x – 2 ในแต่ละรอบ
3.Repeat Loop
Repeat Loop เป็นลูปที่ไม่มีเงื่อนไขตั้งต้น ต้องใช้ break เพื่อหยุดลูป
ตัวอย่างคำสั่งการใช้ Repeat Loop
ตัวอย่างที่ 1: วนลูปจนค่ามากกว่า 5
x <- 1
repeat {
print(x)
x <- x + 1
if (x > 5) {
break
}
}
ผลลัพธ์:
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
อธิบายง่าย
กำหนดตัวแปร x = 1
เขียน Loop ด้วย repeat ตั้งค่าคำสั่งลูป print ตัวแปร x ให้ตัวแปร x + 1 จนกว่า (IF) x มากกว่า 5 ให้หยุดด้วยคำสั่ง break
ตัวอย่างที่ 2: ใช้ร่วมกับเงื่อนไขอื่น
x <- 1
repeat {
if (x %% 2 == 0) {
print(paste(x, "is even"))
}
x <- x + 1
if (x > 10) {
break
}
}
ผลลัพธ์:
[1] "2 is even"
[1] "4 is even"
[1] "6 is even"
[1] "8 is even"
[1] "10 is even"
อธิบายง่าย
กำหนดตัวแปร x = 1
เขียน Loop ด้วย repeat ตั้งค่าเพิ่ม IF ให้ x หาร 2 ลงตัว และ print x ออกมา ถ้าหารลงตัว
ตั้งค่าคำสั่งลูป ให้ตัวแปร x + 1 จนกว่า (IF) x มากกว่า 10 และหยุดทำงาน break
Functional Loops * 🎈
ขอบอกก่อนว่าในภาษา R นอกจากการใช้ Loop แบบดั้งเดิมแล้ว ยังสามารถใช้ฟังก์ชัน lapply, sapply, หรือ map (จากแพ็กเกจ purrr ใน library tidyverse นะคับ) เพื่อวนลูปแบบ functional programming ได้
ตัวอย่างที่ 1: ใช้ lapply กับเวกเตอร์
vec <- 1:5
result <- lapply(vec, function(x) x^2)
print(result)
ผลลัพธ์:
[[1]]
[1] 1
[[2]]
[1] 4
[[3]]
[1] 9
[[4]]
[1] 16
[[5]]
[1] 25
อธิบายง่าย
กำหนดตัวแปร vec = 1 ถึง 5
สร้างตัวแปรใหม่ขึ้นมา result เพื่อเก็บคำสั่งในการ Loop โดยใช้ function lapply ใส่ตัวแปร vec และเขียนฟังก์ชัน function(x) x^2 ให้ คูณ 2 ของในตัวแปร vec แต่ละตัว จากนั้น print result
ตัวอย่างที่ 2: ใช้ sapply เพื่อให้ผลลัพธ์เป็นเวกเตอร์
vec <- 1:5
result <- sapply(vec, function(x) x^2)
print(result)
ผลลัพธ์:
[1] 1 4 9 16 25
อธิบายง่าย
กำหนดตัวแปร vec = 1 ถึง 5
เขียนเหมือน lapply แค่เปลี่ยนเป็น sapply
แต่ sapply แสดง ผลลัพท์เป็นเวกเตอร์
เป็นไงบ้างค้าบบทุกคน จากนี้เราก็สร้าง Loop ง่ายๆแล้วครับ cอยากให้ลองทำตามกันดูนะค้าบ เก่งมากครับทุกคนน 👏


Leave a comment