Genel olarak bu hata mesajı, bir fonksiyonda indekslemeyi kullanmayı denediğiniz anlamına gelir. Bu hata mesajını örneğin ile yeniden oluşturabilirsiniz.
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
Hata mesajında belirtilen kapanış, (gevşek bir şekilde) işlev çağrıldığında değişkenleri depolayan işlev ve ortamdır.
Bu özel durumda, Joshua'nın bahsettiği url
gibi , işleve bir değişken olarak erişmeye çalışıyorsunuz . Adlı bir değişken tanımlarsanız url
, hata ortadan kalkar.
İyi bir uygulama olarak, değişkenleri temel R işlevlerinden sonra adlandırmaktan genellikle kaçınmalısınız. (Değişkenleri çağırmak data
, bu hatanın ortak bir kaynağıdır.)
Operatörleri veya anahtar kelimeleri alt kümeye ayırmaya çalışırken ilgili birkaç hata var.
`+`[1]
## Error in `+`[1] : object of type 'builtin' is not subsettable
`if`[1]
## Error in `if`[1] : object of type 'special' is not subsettable
Bu problemle karşılaşıyorsanız shiny
, bunun en olası nedeni, reactive
parantez kullanarak bir işlev olarak çağırmadan bir ifadeyle çalışmaya çalışmanızdır .
library(shiny)
reactive_df <- reactive({
data.frame(col1 = c(1,2,3),
col2 = c(4,5,6))
})
Genellikle veri çerçeveleri gibi parlak reaktif ifadelerle çalışsak da, bunlar aslında veri çerçevelerini (veya diğer nesneleri) döndüren işlevlerdir .
isolate({
print(reactive_df())
print(reactive_df()$col1)
})
col1 col2
1 1 4
2 2 5
3 3 6
[1] 1 2 3
Ama onu parantez olmadan alt kümeye koymaya çalışırsak, o zaman aslında bir işlevi indekslemeye çalışıyoruz ve bir hata alıyoruz:
isolate(
reactive_df$col1
)
Error in reactive_df$col1 : object of type 'closure' is not subsettable
[]
yerine yanlışlıkla yazmak yerine de ortaya çıkıyor()
!