วิธีจัดการใน 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

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *