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

การกำหนดค่าและตัวดำเนินการพิเศษ

สำรวจ >, %in% และตัวดำเนินการไปป์ใน R

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

การกำหนดค่าใน R

R มีหลายวิธีในการกำหนดค่าให้ตัวแปร รูปแบบที่เป็นธรรมชาติที่สุดคือ <- ซึ่งเป็นรูปแบบที่แนะนำ นอกจากนี้คุณยังอาจพบ = สำหรับการกำหนดค่า แม้ว่าในบางบริบทจะทำงานแตกต่างกันเล็กน้อย

# Both assign a value, <- is preferred
name <- 'Alice'
age = 30
cat('Name:', name, '
')
cat('Age:', age, '
')

ลูกศรซ้าย <- เทียบกับเครื่องหมายเท่ากับ =

<- จะสร้างตัวแปรในสภาพแวดล้อมปัจจุบันเสมอ ส่วน = ก็ใช้กำหนดค่าได้เช่นกัน แต่ภายในการเรียกฟังก์ชัน จะกำหนดอาร์กิวเมนต์ที่มีชื่อแทนการสร้างตัวแปร ความแตกต่างนี้สำคัญ

# <- creates a variable outside function calls
x <- 42

# = inside function call sets argument, does NOT create x
mean(x = c(1, 2, 3))  # x is an arg here, not a variable

# But <- inside a function call DOES create a variable
mean(y <- c(1, 2, 3))  # y is now also in workspace
cat('y was created:', y, '
')

ตัวดำเนินการกำหนดค่าจากขวาไปซ้าย

R รองรับการกำหนดค่าจากขวาไปซ้ายด้วย -> โดยจะกำหนดค่าด้านซ้ายให้กับชื่อทางด้านขวา แม้จะใช้งานได้ แต่ในทางปฏิบัติไม่ค่อยนิยม เนื่องจากทำให้อ่านโค้ดได้ยากขึ้น

# Right assignment operator
100 -> max_score
'R Programming' -> course_name
cat('Max score:', max_score, '
')
cat('Course:', course_name, '
')

# Same as:
# max_score <- 100
# course_name <- 'R Programming'

การกำหนดค่าในสภาพแวดล้อมส่วนกลางด้วย &lt;&lt;-

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

counter <- 0

increment <- function() {
  counter <<- counter + 1  # modifies the global counter
}

increment()
increment()
increment()
cat('Counter after 3 increments:', counter, '
')

ตัวดำเนินการตรวจสอบสมาชิก %in%

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

fruits <- c('apple', 'banana', 'cherry', 'date', 'elderberry')

# Check membership
cat('Is mango in fruits?', 'mango' %in% fruits, '
')
cat('Is cherry in fruits?', 'cherry' %in% fruits, '
')

# Check multiple values at once
search <- c('banana', 'mango', 'date')
cat('Which are in fruits:', search %in% fruits, '
')

การกรองด้วย %in%

%in% มีประโยชน์อย่างมากเมื่อใช้กรองเวกเตอร์หรือแถวของกรอบข้อมูล โดยช่วยให้คุณเลือกสมาชิกที่อยู่ในชุดค่าที่อนุญาตซึ่งกำหนดไว้ล่วงหน้าได้

countries <- c('USA', 'UK', 'Canada', 'Germany', 'France', 'Japan')
populations <- c(331, 67, 38, 83, 67, 126)  # millions

# Keep only G7 European members
g7_europe <- c('UK', 'Germany', 'France', 'Italy')
mask <- countries %in% g7_europe
cat('G7 Europe countries:', countries[mask], '
')
cat('Populations:', populations[mask], '
')

การคูณเมทริกซ์ด้วย %*%

%*% ทำการคูณเมทริกซ์อย่างแท้จริง (ผลคูณจุด) ต่างจาก * ที่คูณสมาชิกในตำแหน่งเดียวกัน สำหรับเมทริกซ์สองตัว A (m x n) และ B (n x p) ผลลัพธ์จะเป็นเมทริกซ์ขนาด (m x p)

A <- matrix(c(1, 2, 3, 4), nrow = 2, ncol = 2)
B <- matrix(c(5, 6, 7, 8), nrow = 2, ncol = 2)

cat('Matrix A:
')
print(A)
cat('Matrix B:
')
print(B)
cat('A %*% B (matrix mult):
')
print(A %*% B)
cat('A * B (element-wise):
')
print(A * B)

ไปป์ดั้งเดิม |&gt;

ไปป์ดั้งเดิม |> ซึ่งเริ่มใช้ใน R 4.1 จะส่งผลลัพธ์ของนิพจน์ด้านซ้ายไปเป็นอาร์กิวเมนต์ตัวแรกของฟังก์ชันด้านขวา ทำให้ลำดับการดำเนินการหลายขั้นอ่านได้ง่ายขึ้นมาก

# Without pipe
result1 <- round(sqrt(abs(-16)), 2)
cat('Without pipe:', result1, '
')

# With native pipe |>
result2 <- -16 |> abs() |> sqrt() |> round(2)
cat('With pipe:', result2, '
')

# Reading left to right: take -16, get abs, sqrt, then round

ไปป์กับเวกเตอร์

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

scores <- c(88, 45, 92, 61, 73, 55, 84, 79)

# Chain: keep passing scores, then compute mean
passing_mean <- scores |> \(x) x[x >= 60] |> mean()
cat('Mean of passing scores:', round(passing_mean, 2), '
')

# Another chain: sort, reverse, take top 3
top3 <- scores |> sort(decreasing = TRUE) |> head(3)
cat('Top 3 scores:', top3, '
')

ตัวดำเนินการแทรกกลางแบบกำหนดเอง

R อนุญาตให้คุณกำหนดตัวดำเนินการแทรกกลางแบบกำหนดเองโดยใช้ไวยากรณ์ %name% ซึ่งเป็นวิธีที่แพ็กเกจอย่าง dplyr ใช้กำหนดไปป์ %>% คุณสามารถสร้างตัวดำเนินการของตนเองสำหรับการดำเนินการเฉพาะด้านได้

# Define a custom infix operator for 'not in'
'%notin%' <- function(x, table) !(x %in% table)

cities <- c('Paris', 'London', 'Berlin', 'Tokyo', 'Sydney')
exclude <- c('Tokyo', 'Sydney')

cat('Cities not in exclude list:', cities[cities %notin% exclude], '
')

สรุปอ้างอิงตัวดำเนินการอย่างรวดเร็ว

ต่อไปนี้คือสรุปตัวดำเนินการพิเศษที่กล่าวถึงในบทเรียนนี้:

  • <- — การกำหนดค่ามาตรฐาน (แนะนำให้ใช้)
  • = — การกำหนดค่า (ใช้กับอาร์กิวเมนต์ของฟังก์ชันด้วย)
  • <<- — การกำหนดค่าในสภาพแวดล้อมส่วนกลาง/สภาพแวดล้อมแม่
  • %in% — การตรวจสอบการเป็นสมาชิก
  • %*% — การคูณเมทริกซ์
  • |> — ไปป์ดั้งเดิม (R 4.1 ขึ้นไป)
  • %name% — ไวยากรณ์ตัวดำเนินการแทรกกลางแบบกำหนดเอง
# Demonstrate %in% as a filter
all_nums <- 1:20
special <- c(3, 6, 9, 12, 15, 18)
cat('Multiples of 3 up to 20:', all_nums[all_nums %in% special], '
')

# Demonstrate pipe
1:10 |> mean() |> cat('
')

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

ตัวดำเนินการ %in% จะคืนค่าอะไรเมื่อใช้เป็น c(2, 4, 6) %in% c(1, 2, 3)?

ทบทวน: ตัวดำเนินการพิเศษ

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

  • ใช้ <- สำหรับการกำหนดค่า ซึ่งเป็นธรรมเนียมของ R
  • = ใช้กำหนดค่าได้ แต่มีความกำกวมเมื่ออยู่ภายในการเรียกฟังก์ชัน
  • <<- แก้ไขตัวแปรในสภาพแวดล้อมแม่ (ส่วนกลาง) จากภายในฟังก์ชัน
  • %in% เป็นวิธีที่ชัดเจนที่สุดในการตรวจสอบการเป็นสมาชิกของเซตใน R
  • %*% ทำการคูณเมทริกซ์ (ไม่ใช่การคูณสมาชิกตามตำแหน่ง)
  • ไปป์ดั้งเดิม |> (R 4.1 ขึ้นไป) เชื่อมการเรียกฟังก์ชันจากซ้ายไปขวา ทำให้โค้ดอ่านง่าย
  • ตัวดำเนินการแบบกำหนดเองใช้รูปแบบ %name%
# Pipe + %in% combined
data <- c(5, 12, 3, 8, 15, 7, 20, 1)
valid_range <- 5:15

result <- data |> \(x) x[x %in% valid_range] |> sort()
cat('Values in range 5-15:', result, '
')

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

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

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

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

สำรวจ >, %in% และตัวดำเนินการไปป์ใน R คุณปฏิบัติ R Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

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

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

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

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

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

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

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

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