R Control Flow: วิธีเขียน if, for, while ในภาษา R เพื่อการทำงานที่ง่ายขึ้น พร้อมตัวอย่าง

ในการเขียน code เรามักจะเจอกับงานที่เราต้องทำซ้ำ ๆ เช่น เปลี่ยนตัวเลขในช่วงที่กำหนด (เช่น 80 ถึง 100) ให้เป็นเกรด (เช่น A)

แทนที่เราจะเขียน code ใหม่ทุกครั้งที่เราเจอตัวเลข (เช่น 89, 82, 91) เราสามารถใช้ control flow เข้ามาช่วย automate งาน ลดเวลาและภาระงานของเราลงไปได้

.

ในบทความนี้ เราจะมาดูวิธีเขียน control flow ในภาษา R กัน:

  • If-else:
    • if
    • else
    • else if
  • Loops:
    • for
    • while
  • Loop control:
    • next
    • break

ถ้าพร้อมแล้ว มาเริ่มกันเลย


  1. 🕹️ If-Else
    1. 1️⃣ if
    2. 2️⃣ else
    3. 3️⃣ else if
  2. 🔁 Loops
    1. 1️⃣ for
    2. 2️⃣ while
  3. 🚸 Loop Control
    1. 1️⃣ next
    2. 2️⃣ break
  4. 💪 Summary
  5. 🗒️ Practice Control Flow
  6. 😺 GitHub
  7. 📃 References
  8. ✅ R Book for Psychologists: หนังสือภาษา R สำหรับนักจิตวิทยา

🕹️ If-Else

ในการเขียน if-else เรามี 3 syntax ที่ต้องทำความเข้าใจ:

  1. if
  2. else
  3. else if

.

1️⃣ if

เราใช้ if เพื่อกำหนดเงื่อนไขในการทำงาน

เช่น ถ้าคะแนนมากกว่า 60 ให้ผ่าน:

if (score >= 60) {
	print("Pass")
}

ถ้าไม่ตรงกับเงื่อนไข R จะรัน code บรรทัดถัดไป

.

2️⃣ else

เราใช้ else เพื่อกำหนด action ที่ต้องทำเมื่อข้อมูลไม่เข้าเงื่อนไข

เช่น ถ้าน้อยกว่า 60 ให้ไม่ผ่าน:

if (score >= 60) {
	print("Pass")
} else {
	print("Fail")
}

ในครั้งนี้ R จะแสดงคำว่า “Pass” หรือ “Fail” ก่อนจะรัน code บรรทัดถัดไป

.

3️⃣ else if

ถ้าเรามีมากกว่า 2 เงื่อนไข ให้ใช้ else if เพื่อกำหนดเงื่อนไขเพิ่มเติม

เช่น ตัดเกรดตามช่วงคะแนน:

if (score >= 90) {
	print("A")
} else if (score >= 80) {
	print("B")
} else if (score >= 70) {
	print("C")
} else if (score >= 60) {
	print("D")
} else {
	print("F")
}

ใน code นี้ R จะรันแต่ละบรรทัด และถ้าข้อมูลที่มีตรงกับเงื่อนไข ก็จะทำตาม action ในบรรทัดนั้น

เช่น เรากำหนดให้:

score <- 71

R จะรัน else if จนถึงบรรทัดที่ 5 แล้วทำ action ที่อยู่ในบรรทัด 6:

if, else if, else

🔁 Loops

Loops ใช้ในการทำ task ซ้ำเรื่อย ๆ ตามเงื่อนไขที่กำหนด

เราสามารถเขียน loop ได้ 2 แบบ คือ:

  1. for
  2. while

.

1️⃣ for

for ใช้สำหรับทำงานซ้ำ ๆ ที่เรารู้ว่าจะต้องทำกี่ครั้ง

เช่น เรามีรายชื่อเพื่อนที่เราอยากจะทักทาย:

friends <- c("John",
             "Sarah", 
             "Emma",
             "Mike")

เราสามารถใช้ for loop ช่วยได้แบบนี้:

for (friend in friends) {
  print(paste("Hello,", friend))
}

ผลลัพธ์:

for loop

.

2️⃣ while

เราใช้ while เมื่อต้องทำงานซ้ำ ๆ ที่เราไม่รู้ว่าจะต้องทำกี่ครั้ง

โดย while จะทำงานไปเรื่อย ๆ จนกว่าเงื่อนไขที่กำหนดจะไม่เป็นจริง

เช่น ทอยเต๋าเรื่อย ๆ จนกว่าจะได้เลข 6:

set.seed(42)

roll <- sample(1:6, 1)

while (roll != 6) {
  print(paste("Rolled:", roll, "Not yet..."))
  roll <- sample(1:6, 1)
}

print("You rolled a 6! Congratulations!")

อธิบาย code:

CodeExplain
set.seed(42)ทำให้ code ให้ผลลัพธ์เหมือนกันทุกครั้ง
sample(1:6, 1)สุ่ม 1 เลข ระหว่าง 1 ถึง 6
while (roll != 6) {...}จนกว่า roll จะเท่ากับ 6 ให้ทำ action ใน {...}
print("You rolled a 6! Congratulations!")ถ้าหลุดจาก while loop แล้ว ให้ print “You rolled a 6! Congratulations!”

ถ้ารัน code แล้ว เราจะได้ผลลัพธ์แบบนี้:

while loop

จะเห็นว่า while loop หยุดเมื่อ roll != 6 ไม่เป็นจริง (เมื่อ roll = 6)


🚸 Loop Control

ในการเขียน for และ while loops เรามี 2 statements ที่ช่วยกำกับ loops ได้ คือ:

  1. next
  2. break

.

1️⃣ next

next ใช้เพื่อข้ามข้อมูลที่เราไม่ต้องการให้เกิด action

เช่น เรามี list ของสี:

colours <- c("🟢", "🔴", "🔵", "🔴", "🟠", "🟢")

ซึ่งเราต้องการ print เฉพาะสีโทนเย็น (skip สีโทนร้อน เช่น 🔴, 🟠) เราสามารถใช้ next คู่กับ if และ for ได้แบบนี้:

for (colour in colours) {
  if (colour == "🔴" | colour == "🟠") next
  print(colour)  
}

ผลลัพธ์:

next

จะเห็นได้ว่า code ของเราข้ามข้อมูลที่เป็นสีโทนร้อน และ print เฉพาะสีโทนเย็นออกมา

.

2️⃣ break

break ทำหน้าที่คล้าย next

แต่แทนที่จะข้ามข้อมูลไป break จะหยุดการทำงานของ loop และปล่อยให้ R รัน code บรรทัดหลังจาก loop ได้

เช่น เรามี while loop ที่นับเลขตั้งแต่ 10 ถึง 0:

time <- 10  # Start countdown

while (time > 0) {
  print(paste("Counting down:", time))
  time <- time - 1
}

ถ้าเราไม่ใส่ break, while loop ของเราจะนับเลขถึง 0:

while without break

.

แต่ถ้าเราใส่ break เข้าไป while loop จะหยุดนับ ณ ตัวเลขที่เรากำหนด:

time <- 10  # Start countdown

while (time > 0) {
  if (time == 4) {
    print("Countdown stopped.")
    break  # Stop the loop when time reaches 4
  }
  print(paste("Counting down:", time))
  time <- time - 1
}

ผลลัพธ์:

while with break

จะเห็นได้ว่า break ทำให้ while loop หยุดทำงาน เมื่อนับถึง 4


💪 Summary

ในบทความนี้ เราเรียนรู้วิธีเขียน control flow ใน R กัน:

If-else:

StatementDescription
ifกำหนด 1 เงื่อนไข
elseทำ action เมื่ออยู่นอกเงื่อนไข
else ifเพิ่มเงื่อนไข

Loops:

StatementDescription
forrepeat task เมื่อรู้ว่า action ที่ต้องทำจะเกิดขึ้นกี่ครั้ง
whilerepeat task เมื่อไม่รู้ว่า action ที่ต้องทำจะเกิดขึ้นกี่ครั้ง

Loop control:

StatementDescription
nextSkip ข้อมูลใน loop
breakหยุด loop

🗒️ Practice Control Flow

แม้ว่าตัวอย่างในบทความนี้จะเป็นตัวอย่างง่าย ๆ แต่ control flow เป็นการเขียน code ที่มีประโยชน์มาก และสามารถใช้แก้ปัญหาทั้งเล็กและใหญ่ในโลกจริงได้ เช่น:

  • ส่ง update ข้อมูล PM2.5 รายวัน
  • เช็ก username และ password เพื่อยืนยันการเข้าสู่ระบบ
  • ทำระบบสั่งอาหารและจ่ายเงินออนไลน์
  • สร้างเกมเป่ายิ้งฉุบ
  • สร้างระบบกดเงิน ATM

และอีกมากมาย

.

สำหรับคนที่สนใจสามารถลองเขียน control flow เพื่อแก้ปัญหาเหล่านี้ได้

.

ติดตั้ง R และ RStudio เพื่อใช้งาน R:


😺 GitHub

ดูตัวอย่าง code ในบทความนี้ได้ที่ GitHub


📃 References


✅ R Book for Psychologists: หนังสือภาษา R สำหรับนักจิตวิทยา

📕 ขอฝากหนังสือเล่มแรกในชีวิตด้วยนะครับ 😆

🙋 ใครที่กำลังเรียนจิตวิทยาหรือทำงานสายจิตวิทยา และเบื่อที่ต้องใช้ software ราคาแพงอย่าง SPSS และ Excel เพื่อทำข้อมูล

💪 ผมขอแนะนำ R Book for Psychologists หนังสือสอนใช้ภาษา R เพื่อการวิเคราะห์ข้อมูลทางจิตวิทยา ที่เขียนมาเพื่อนักจิตวิทยาที่ไม่เคยมีประสบการณ์เขียน code มาก่อน

ในหนังสือ เราจะปูพื้นฐานภาษา R และพาไปดูวิธีวิเคราะห์สถิติที่ใช้บ่อยกัน เช่น:

  • Correlation
  • t-tests
  • ANOVA
  • Reliability
  • Factor analysis

🚀 เมื่ออ่านและทำตามตัวอย่างใน R Book for Psychologists ทุกคนจะไม่ต้องพึง SPSS และ Excel ในการทำงานอีกต่อไป และสามารถวิเคราะห์ข้อมูลด้วยตัวเองได้ด้วยความมั่นใจ

แล้วทุกคนจะแปลกใจว่า ทำไมภาษา R ง่ายขนาดนี้ 🙂‍↕️

👉 สนใจดูรายละเอียดหนังสือได้ที่ meb:

Comments

Leave a comment