0Pricing
R Academy · บทเรียน

ตัวดำเนินการตรรกะและตรรกะแบบบูลีน

ทำความเข้าใจ &, |, !, xor(), any() และ all() สำหรับการดำเนินการแบบบูลีน

ตัวดำเนินการตรรกะและตรรกะแบบบูลีน เป็นบทเรียน R Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน R Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน

บทนำสู่ตรรกะบูลีน

ตรรกะบูลีนเป็นพื้นฐานของการตัดสินใจในการเขียนโปรแกรม ใน R ค่าตรรกะคือ TRUE และ FALSE ตัวดำเนินการตรรกะจะรวมค่าเหล่านี้เพื่อสร้างเงื่อนไขที่ซับซ้อน

# Boolean values in R
is_raining <- TRUE
is_cold <- FALSE
cat('Is raining:', is_raining, '
')
cat('Is cold:', is_cold, '
')
cat('Class:', class(is_raining), '
')

AND ทีละสมาชิกด้วย &

ตัวดำเนินการ & ทำ AND ทีละสมาชิกบนเวกเตอร์ โดยจะคืนค่า TRUE ต่อเมื่อสมาชิกที่สอดคล้องกันทั้งคู่เป็น TRUE ตัวดำเนินการนี้ประมวลผลสมาชิกทุกตัวในเวกเตอร์

ages <- c(15, 22, 17, 30, 19)
has_id <- c(FALSE, TRUE, FALSE, TRUE, TRUE)

# Can buy alcohol? (must be 18+ AND have ID)
can_buy <- (ages >= 18) & has_id
cat('Ages >= 18:', ages >= 18, '
')
cat('Has ID:', has_id, '
')
cat('Can buy:', can_buy, '
')

OR ทีละสมาชิกด้วย |

ตัวดำเนินการ | ทำ OR ทีละสมาชิก โดยจะคืนค่า TRUE เมื่อสมาชิกที่สอดคล้องกันอย่างน้อยหนึ่งตัวเป็น TRUE

scores_math <- c(85, 45, 72, 38, 90)
scores_english <- c(40, 88, 65, 70, 55)

# Pass if either subject >= 60
passes <- (scores_math >= 60) | (scores_english >= 60)
cat('Math pass:', scores_math >= 60, '
')
cat('English pass:', scores_english >= 60, '
')
cat('Overall pass:', passes, '
')

NOT ทางตรรกะด้วย !

ตัวดำเนินการ ! จะทำให้ค่าตรรกะเป็นตรงข้าม โดยเปลี่ยน TRUE เป็น FALSE และในทางกลับกัน ตัวดำเนินการนี้จะทำงานก่อน & และ | ตามลำดับการประเมินผล

is_weekend <- c(TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE)
cat('Is weekend:', is_weekend, '
')
cat('Is weekday:', !is_weekend, '
')

# Count weekdays
cat('Number of weekdays:', sum(!is_weekend), '
')

AND ระดับสเกลาร์ด้วย &&

&& คือ ANDระดับสเกลาร์ โดยจะประเมินเฉพาะสมาชิกตัวแรกของแต่ละเวกเตอร์ และใช้การประเมินผลแบบลัดวงจร: หากด้านซ้ายเป็น FALSE จะไม่ประเมินด้านขวาเลย

x <- 10

# Short-circuit: second condition skipped if first is FALSE
if (x > 0 && x < 100) {
  cat('x is a positive double-digit or less
')
}

# && only looks at first element
cat('TRUE && FALSE:', TRUE && FALSE, '
')
cat('TRUE & FALSE (vectorised):', TRUE & FALSE, '
')

OR ระดับสเกลาร์ด้วย ||

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

user_role <- 'admin'

# Short-circuit OR — stops at first TRUE
if (user_role == 'admin' || user_role == 'superuser') {
  cat('Access granted
')
} else {
  cat('Access denied
')
}

cat('FALSE || TRUE:', FALSE || TRUE, '
')

Exclusive OR ด้วย xor()

xor(x, y) จะคืนค่า TRUE เมื่อ มีเพียงหนึ่งค่าเท่านั้น ระหว่าง x หรือ y ที่เป็น TRUE และจะคืนค่า FALSE เมื่อทั้งสองค่ามีสถานะเหมือนกัน เหมาะสำหรับตรรกะสลับสถานะ

# xor truth table
cat('xor(TRUE, TRUE):', xor(TRUE, TRUE), '
')   # FALSE
cat('xor(TRUE, FALSE):', xor(TRUE, FALSE), '
')  # TRUE
cat('xor(FALSE, TRUE):', xor(FALSE, TRUE), '
')  # TRUE
cat('xor(FALSE, FALSE):', xor(FALSE, FALSE), '
') # FALSE

# Practical: exactly one sensor triggered
sensor_a <- c(TRUE, FALSE, TRUE, FALSE)
sensor_b <- c(FALSE, FALSE, TRUE, TRUE)
cat('Exactly one sensor:', xor(sensor_a, sensor_b), '
')

any() และ all()

any() จะคืนค่า TRUE หากสมาชิกอย่างน้อยหนึ่งตัวเป็น TRUE ส่วน all() จะคืนค่า TRUE ต่อเมื่อสมาชิกทุกตัวเป็น TRUE ทั้งสองฟังก์ชันจะยุบเวกเตอร์ตรรกะให้เหลือค่าเดียว

temperatures <- c(22.1, 24.5, 19.8, 31.2, 28.0)

cat('Any temperature above 30?', any(temperatures > 30), '
')
cat('All temperatures above 15?', all(temperatures > 15), '
')
cat('All temperatures above 25?', all(temperatures > 25), '
')

# Useful for data validation
test_scores <- c(78, 85, 92, 88, 76)
cat('All passed (>=60)?', all(test_scores >= 60), '
')

การรวมตัวดำเนินการตรรกะ

คุณสามารถเชื่อมตัวดำเนินการตรรกะหลายตัวเพื่อสร้างเงื่อนไขที่ซับซ้อนได้ R จะประเมิน ! ก่อน ตามด้วย & แล้วจึงเป็น | ใช้วงเล็บเพื่อทำให้เจตนาของโค้ดชัดเจน

age <- 25
income <- 55000
credit_score <- 720

# Loan eligibility: age 21-65, income >= 40000, credit >= 700
eligible <- (age >= 21 && age <= 65) &&
            (income >= 40000) &&
            (credit_score >= 700)
cat('Loan eligible:', eligible, '
')

ตัวดำเนินการตรรกะกับดาต้าเฟรม

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

# Simple data frame
names_vec <- c('Alice', 'Bob', 'Carol', 'Dave', 'Eve')
ages_vec <- c(28, 35, 22, 45, 31)
salaries <- c(55000, 72000, 38000, 90000, 61000)

# Filter: age 25-40 AND salary above 50000
mask <- (ages_vec >= 25 & ages_vec <= 40) & (salaries > 50000)
cat('Matching employees:', names_vec[mask], '
')

เลขคณิตแบบบูลีน

ใน R TRUE จะถูกถือเป็น 1 และ FALSE เป็น 0 เมื่อใช้ในการคำนวณ ดังนั้นคุณจึงใช้ sum() เพื่อนับค่า TRUE และใช้ mean() เพื่อหาสัดส่วนได้

responses <- c(TRUE, FALSE, TRUE, TRUE, FALSE, TRUE, FALSE, TRUE)

cat('Number of TRUE:', sum(responses), '
')
cat('Proportion TRUE:', mean(responses), '
')
cat('Percentage:', mean(responses) * 100, '%
')

# Count values meeting a condition
scores <- c(88, 45, 92, 61, 73, 55, 84)
cat('Number passing (>=60):', sum(scores >= 60), '
')

ตรวจสอบความเข้าใจอย่างรวดเร็ว

& และ && ใน R แตกต่างกันอย่างไร

ทบทวน: ตรรกะบูลีนใน R

ยอดเยี่ยม! ต่อไปนี้คือประเด็นสำคัญจากบทเรียนนี้:

  • & และ | ทำงานแบบประมวลผลเป็นเวกเตอร์ โดยเปรียบเทียบสมาชิกทีละตัว
  • && และ || เป็นตัวดำเนินการระดับสเกลาร์ที่ใช้การประเมินผลแบบลัดวงจร — ใช้ในคำสั่ง if
  • ! ทำให้ค่าตรรกะเป็นตรงข้าม
  • xor() จะคืนค่า TRUE เมื่อมีอาร์กิวเมนต์เพียงหนึ่งตัวที่เป็น TRUE
  • any() และ all() จะยุบเวกเตอร์ตรรกะให้เหลือค่าเดียว
  • TRUE == 1 และ FALSE == 0 ดังนั้นคุณจึงหาผลรวมหรือค่าเฉลี่ยของเวกเตอร์ตรรกะได้
# Summary: all logical operators at a glance
x <- c(TRUE, FALSE, TRUE)
y <- c(TRUE, TRUE, FALSE)
cat('x & y :', x & y, '
')
cat('x | y :', x | y, '
')
cat('!x    :', !x, '
')
cat('xor   :', xor(x, y), '
')
cat('any(x):', any(x), '
')
cat('all(x):', all(x), '
')

คำถามที่พบบ่อย

บทเรียน “ตัวดำเนินการตรรกะและตรรกะแบบบูลีน” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ตัวดำเนินการตรรกะและตรรกะแบบบูลีน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส R Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ตัวดำเนินการตรรกะและตรรกะแบบบูลีน”

ทำความเข้าใจ &, |, !, xor(), any() และ all() สำหรับการดำเนินการแบบบูลีน คุณปฏิบัติ R Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน R Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน R Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “ตัวดำเนินการตรรกะและตรรกะแบบบูลีน” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน R Academy นี้ได้ไหม

ได้ บทเรียน R Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ตัวดำเนินการเลขคณิตและการเปรียบเทียบ
  2. ตัวดำเนินการตรรกะและตรรกะแบบบูลีน
  3. การกำหนดค่าและตัวดำเนินการพิเศษ
  4. ลำดับความสำคัญของตัวดำเนินการและนิพจน์ซับซ้อน
← กลับไปที่ R Academy