R ส่งอาร์กิวเมนต์แบบ by value
ชื่อหัวข้อบอกไว้แล้ว: R ส่งอาร์กิวเมนต์แบบ by value หมายความว่าอย่างไร? พูดง่ายๆ คือ ฟังก์ชันใน R ไม่สามารถเปลี่ยนแปลงค่าของตัวแปรที่ส่งเข้าไปได้ ลองดูตัวอย่างง่ายๆ นี้ (รันในคอนโซลได้เลย):
triple <- function(x) {
x <- 3*x
x
}
a <- 5
triple(a)
a
ภายในฟังก์ชัน triple() อาร์กิวเมนต์ x จะถูกกำหนดค่าใหม่เป็นสามเท่าของค่าเดิม แล้วจึงคืนค่า x ใหม่นั้น ถ้าเรียกใช้ฟังก์ชันนี้โดยส่งตัวแปร a ที่มีค่าเท่ากับ 5 เข้าไป จะได้ผลลัพธ์เป็น 15 แต่ค่าของ a เปลี่ยนไปด้วยหรือไม่? หาก R ส่งค่าแบบ by reference การเปลี่ยนแปลง x ภายใน ฟังก์ชันก็จะส่งผลต่อตัวแปร a ภายนอกฟังก์ชันด้วย แต่เนื่องจาก R ส่งค่าแบบ by value อ็อบเจกต์ที่ส่งเข้าไปในฟังก์ชันจึงไม่มีวันเปลี่ยนแปลง เว้นแต่จะมีการกำหนดค่าอย่างชัดเจน a ยังคงเท่ากับ 5 แม้หลังจากเรียก triple(a) แล้ว
ข้อความใดต่อไปนี้ ไม่ถูกต้อง เกี่ยวกับโค้ดด้านล่างนี้?
increment <- function(x, inc = 1) {
x <- x + inc
x
}
count <- 5
a <- increment(count, 2)
b <- increment(count)
count <- increment(count, 2)
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
R ระดับกลาง
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำจริง
เปลี่ยนทฤษฎีให้เป็นการลงมือทำด้วยแบบฝึกหัดเชิงโต้ตอบหนึ่งในของเรา
เริ่มแบบฝึกหัด