การสร้าง Loop (For / While / Repeat / Purr *) in R – Programming

สวัสดีค้าาบ วันนี้แอดขอพาขึ้นเนื้อหา R Programming เนื้อหานี้สำหรับคนที่มีพื้นฐานแล้วนะครับ

Loop หรือ “การวนลูป” คือโครงสร้างที่ช่วยให้เราสามารถทำงานเดิมซ้ำๆซ้อนกันได้โดยไม่ต้องเขียนโค้ดซ้ำหลายครั้ง มีประโยชน์มากเมื่อต้องจัดการข้อมูลจำนวนมากหรือทำงานซ้ำๆ ในลักษณะเดียวกัน

ภาษา R มีรูปแบบการใช้งาน Loop หลักๆ อยู่ 3 แบบ ได้แก่:

  1. For Loop
  2. While Loop
  3. 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