<मेरे कोड> में त्रुटि: प्रकार 'बंद' का उद्देश्य सदस्यता नहीं है


110

मैं आखिरकार अपने स्क्रैपिंग के लिए कोड का काम करने में सक्षम था । यह ठीक काम कर रहा था और फिर अचानक जब मैंने इसे फिर से चलाया, तो मुझे निम्न त्रुटि संदेश मिला:

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

मुझे यकीन नहीं है कि क्यों मैंने अपने कोड में कुछ भी नहीं बदला।

कृपया सलाह दें।

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
इसके अलावा, यह तब होता है, जैसा कि मेरे मामले में है, जब आप गलती से केवल []इसके बजाय टाइप करते हैं ()!
एहसान88

जवाबों:


118

सामान्य तौर पर इस त्रुटि संदेश का अर्थ है कि आपने किसी फ़ंक्शन पर अनुक्रमण का उपयोग करने का प्रयास किया है। उदाहरण के लिए, आप इस त्रुटि संदेश को पुन: उत्पन्न कर सकते हैं

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

त्रुटि संदेश में वर्णित क्लोजर (शिथिल) फ़ंक्शन और पर्यावरण है जो फ़ंक्शन को कॉल करने पर चर को संग्रहीत करता है।


इस विशिष्ट मामले में, जैसा कि यहोशू ने उल्लेख किया है, आप urlफ़ंक्शन को एक चर के रूप में एक्सेस करने की कोशिश कर रहे हैं । यदि आप नामित चर को परिभाषित करते हैं url, तो त्रुटि दूर हो जाती है।

अच्छे अभ्यास के रूप में, आपको आमतौर पर बेस-आर कार्यों के बाद नामकरण चर से बचना चाहिए। (चर 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

35

आप इसे कम करने की urlकोशिश करने से पहले, वेक्टर को परिभाषित नहीं करते हैं । urlबेस पैकेज में एक फ़ंक्शन भी है, इसलिए url[i]उस फ़ंक्शन को कम करने का प्रयास किया जा रहा है ... जिसका कोई मतलब नहीं है।

आप शायद urlअपने पूर्व आर सत्र में परिभाषित करते हैं, लेकिन उस कोड को अपनी स्क्रिप्ट में कॉपी करना भूल गए।


1

इस तरह की त्रुटि के मामले में चेतावनी: $ में त्रुटि: प्रकार 'बंद' का उद्देश्य सबसेटेबल नहीं है [स्टैक ट्रेस उपलब्ध नहीं है]

बस :: उदाहरण के लिए संबंधित पैकेज नाम जोड़ें

टैग के बजाय (....)

चमकदार :: टैग्स (....) लिखें


0

मैं इस मुद्दे को एक घटना प्रतिक्रियाशील के अंदर एक ui तत्व को हटाने की कोशिश कर रहा था:

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

मुझे यह त्रुटि मिल रही थी, लेकिन हटाए गए तत्व लाइन पर नहीं, यह किसी कारण से अगले पर्यवेक्षक में था। निष्कासन विधि को घटना से बाहर निकालना और इसे कहीं और रखना मेरे लिए इस त्रुटि को दूर करता है।


-5

मुझे लगता है कि आप करना चाहते थे url[i] <- paste(...

के बजाय url[i] = paste(...। यदि ऐसा है तो =साथ दें <-

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.