<আমার কোড> -এ ত্রুটি: 'ক্লোজার' টাইপের অবজেক্টটি সাবসেটেবল নয়


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

আমি এই সমস্যাটি একটি ইভেন্টের মধ্যে একটি ইউআই উপাদান সরিয়ে দেওয়ার চেষ্টা করছিলাম প্রতিক্রিয়াশীল:

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

আমি এই ত্রুটিটি পাচ্ছিলাম, কিন্তু অপসারণ আইআই উপাদান লাইনে নয়, এটি কোনও কারণে পরে পরবর্তী পর্যবেক্ষকের কাছে ছিল। ইভেন্টের থেকে অপসারণের পদ্ধতিটি বাইরে নিয়ে যাওয়া এবং এটি অন্য কোথাও স্থাপন করা আমার জন্য এই ত্রুটিটি সরিয়ে নিয়েছে।


-5

আমি মনে করি আপনি করতে চেয়েছিলেন url[i] <- paste(...

পরিবর্তে url[i] = paste(...। যদি তাই =সঙ্গে প্রতিস্থাপন <-

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.