โดยทั่วไปข้อความแสดงข้อผิดพลาดนี้หมายความว่าคุณได้พยายามใช้การจัดทำดัชนีกับฟังก์ชัน คุณสามารถสร้างข้อความแสดงข้อผิดพลาดนี้ขึ้นมาใหม่ด้วยตัวอย่างเช่น
mean[1]
## Error in mean[1] : object of type 'closure' is not subsettable
mean[[1]]
## Error in mean[[1]] : object of type 'closure' is not subsettable
mean$a
## Error in mean$a : object of type 'closure' is not subsettable
การปิดที่กล่าวถึงในข้อความแสดงข้อผิดพลาดคือ (อย่างหลวม ๆ ) ฟังก์ชันและสภาพแวดล้อมที่เก็บตัวแปรเมื่อฟังก์ชันถูกเรียกใช้
ในกรณีเฉพาะนี้ดังที่ Joshua กล่าวถึงคุณกำลังพยายามเข้าถึงurl
ฟังก์ชันเป็นตัวแปร หากคุณกำหนดชื่อตัวแปรurl
ข้อผิดพลาดจะหายไป
ตามหลักปฏิบัติที่ดีคุณควรหลีกเลี่ยงการตั้งชื่อตัวแปรหลังฟังก์ชัน base-R (การเรียกตัวแปรdata
เป็นแหล่งที่มาทั่วไปของข้อผิดพลาดนี้)
มีข้อผิดพลาดที่เกี่ยวข้องหลายประการสำหรับการพยายามเซ็ตตัวดำเนินการหรือคำหลัก
`+`[1]
## Error in `+`[1] : object of type 'builtin' is not subsettable
`if`[1]
## Error in `if`[1] : object of type 'special' is not subsettable
หากคุณพบปัญหานี้shiny
สาเหตุที่เป็นไปได้มากที่สุดคือคุณพยายามทำงานกับreactive
นิพจน์โดยไม่เรียกมันว่าเป็นฟังก์ชันโดยใช้วงเล็บ
library(shiny)
reactive_df <- reactive({
data.frame(col1 = c(1,2,3),
col2 = c(4,5,6))
})
แม้ว่าเรามักจะทำงานกับนิพจน์รีแอคทีฟเป็นเงาราวกับว่าเป็นเฟรมข้อมูล แต่จริงๆแล้วฟังก์ชันเหล่านี้เป็นฟังก์ชันที่ส่งคืนเฟรมข้อมูล (หรือวัตถุอื่น ๆ )
isolate({
print(reactive_df())
print(reactive_df()$col1)
})
col1 col2
1 1 4
2 2 5
3 3 6
[1] 1 2 3
แต่ถ้าเราพยายามเซตย่อยโดยไม่มีวงเล็บแสดงว่าเรากำลังพยายามทำดัชนีฟังก์ชันและเราได้รับข้อผิดพลาด:
isolate(
reactive_df$col1
)
Error in reactive_df$col1 : object of type 'closure' is not subsettable
[]
แทนที่จะเป็น()
!