<Kodum> hatası: 'kapanış' türündeki nesne, alt ayarlanamaz


110

Sonunda kazımamın kodunu çözmeyi başardım . İyi çalışıyor gibiydi ve sonra tekrar çalıştırdığımda aniden aşağıdaki hata mesajını aldım:

Error in url[i] = paste("http://en.wikipedia.org/wiki/", gsub(" ", "_",  : 
  object of type 'closure' is not subsettable

Kodumda neden hiçbir şeyi değiştirmediğimden emin değilim.

Tavsiye lütfen.

library(XML)
library(plyr)

names <- c("George Clooney", "Kevin Costner", "George Bush", "Amar Shanghavi")

for(i in 1:length(names)) {
    url[i] = paste('http://en.wikipedia.org/wiki/', gsub(" ","_", names[i]) , sep="")

    # some parsing code
}

3
Ayrıca benim durumumda olduğu gibi, []yerine yanlışlıkla yazmak yerine de ortaya çıkıyor ()!
Ehsan88

Yanıtlar:


118

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 urlgibi , 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, reactiveparantez 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

35

Vektörü urlalt kümeye koymadan önce tanımlamazsınız . urlaynı zamanda temel pakette bir işlevdir, bu nedenle url[i]bu işlevi alt kümeye ayırmaya çalışmak ... bu mantıklı değil.

Muhtemelen urlönceki R oturumunuzda tanımladınız , ancak bu kodu betiğinize kopyalamayı unuttunuz.


1

Bu benzer bir hata durumunda Uyarı: $: 'kapanış' türündeki nesne alt ayarlanamaz [Yığın izleme yok]

Sadece karşılık gelen paket adını ekleyin :: eg

etiketlerin yerine (....)

parlak :: etiketler yaz (....)


0

Bu sorunu yaşadım, reaktif bir etkinlik içindeki bir kullanıcı arabirimi öğesini kaldırmaya çalışıyordu:

myReactives <- eventReactive(input$execute, {
    ... # Some other long running function here
    removeUI(selector = "#placeholder2")
})

Bu hatayı alıyordum, ancak removeUI öğe satırında değil, bir nedenden ötürü sonraki gözlemcideydi. RemoveUI yöntemini eventReactive'den çıkarmak ve başka bir yere yerleştirmek bu hatayı benim için ortadan kaldırdı.


-5

Bence yapmak istedin url[i] <- paste(...

yerine url[i] = paste(.... Eğer öyleyse değiştirmek =ile <-.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.