วิธีจัดการใน r: วัตถุประเภท "การปิด" ไม่สามารถกำหนดย่อยได้
ข้อผิดพลาดที่คุณอาจพบใน R คือ:
object of type 'closure' is not subsettable
ข้อผิดพลาดนี้เกิดขึ้นเมื่อคุณพยายามสับเซ็ตฟังก์ชัน
ใน R เป็นไปได้ที่จะซับเซตรายการ เวกเตอร์ เมทริกซ์ และเฟรมข้อมูล แต่ฟังก์ชันมีประเภท “ปิด” ซึ่งไม่สามารถสับเซตได้
บทช่วยสอนนี้จะอธิบายวิธีแก้ไขข้อผิดพลาดนี้อย่างชัดเจน
วิธีการทำซ้ำข้อผิดพลาด
สมมติว่าเราสร้างฟังก์ชันต่อไปนี้ใน R โดยนำแต่ละค่าของเวกเตอร์มาคูณด้วย 5:
#define function
cool_function <- function (x) {
x <- x*5
return (x)
}
นี่คือวิธีที่เราสามารถใช้ฟังก์ชันนี้ในทางปฏิบัติ:
#define data
data <- c(2, 3, 3, 4, 5, 5, 6, 9)
#apply function to data
cool_function(data)
[1] 10 15 15 20 25 25 30 45
โปรดทราบว่าแต่ละค่าของเวกเตอร์ดั้งเดิมจะถูกคูณด้วย 5
ตอนนี้ สมมติว่าเราพยายามสับเซตฟังก์ชัน:
#attempt to get first element of function
cool_function[1]
Error in cool_function[1]: object of type 'closure' is not subsettable
เราได้รับข้อผิดพลาดเนื่องจากไม่สามารถสับเซ็ตออบเจ็กต์ประเภท “ปิด” ใน R ได้
เราสามารถใช้ไวยากรณ์ต่อไปนี้เพื่อตรวจสอบว่าฟังก์ชันนั้นเป็นประเภท ‘ปิด’ จริง ๆ:
#print object type of function
typeof(cool_function)
[1] “closure”
ตัวอย่างเพิ่มเติมของวัตถุ “การปิด”
ทุกฟังก์ชันใน R อยู่ในประเภท “ปิด” ตัวอย่างเช่น เราจะได้รับข้อผิดพลาดนี้หากเราพยายามสับเซ็ตฟังก์ชันใดๆ ในฐาน R:
#attempt to subset mean function
mean[1]
Error in mean[1]: object of type 'closure' is not subsettable
#attempt to subset standard deviation function
sd[1]
Error in sd[1]: object of type 'closure' is not subsettable
#attempt to subset table function
tabld[1]
Error in table[1]: object of type 'closure' is not subsettable
วิธีแก้ไขข้อผิดพลาด
วิธีแก้ไขข้อผิดพลาดนี้คือหลีกเลี่ยงการกำหนดฟังก์ชันน้อยเกินไป
ตัวอย่างเช่น หากเราต้องการใช้ cool_function ก่อนหน้ากับองค์ประกอบแรกของเวกเตอร์เท่านั้น เราสามารถใช้ไวยากรณ์ต่อไปนี้:
#apply function to just first element in vector
cool_function(data[1])
[1] 10
เราไม่ได้รับข้อผิดพลาดเนื่องจากเราสับเซตเวกเตอร์แทนฟังก์ชัน
หรือเราอาจใช้ cool_function กับเวกเตอร์ทั้งหมด:
#apply function to every element in vector
cool_function(data)
[1] 10 15 15 20 25 25 30 45
เราไม่ได้รับข้อผิดพลาดเนื่องจากเราไม่ได้พยายามสับเซ็ตฟังก์ชันแต่อย่างใด
แหล่งข้อมูลเพิ่มเติม
บทช่วยสอนต่อไปนี้อธิบายวิธีแก้ไขข้อผิดพลาดทั่วไปอื่น ๆ ใน R:
วิธีแก้ไข: เงื่อนไขมีความยาว > 1 และระบบจะใช้เฉพาะองค์ประกอบแรกเท่านั้น
วิธีแก้ไขใน R: dim(X) ต้องมีความยาวเป็นบวก
วิธีแก้ไขใน R: ค่าหายไปโดยจำเป็นต้องมีค่าจริง/เท็จ
วิธีแก้ไข: NAs ถูกแนะนำโดย Coercion