मुख्य सामग्री पर जाएँ

R में Non-Numeric Argument to Binary Operator त्रुटि कैसे ठीक करें

R में non-numeric argument to binary operator त्रुटि तब होती है जब आप किसी गैर-आंकिक डेटा, जैसे character string या factor, पर अंकगणित करने की कोशिश करते हैं।
· 8 मि॰ पढ़ें

AI के साथ खोजें

आपने R में प्रोग्रामिंग करते समय यह त्रुटि देखी होगी: Error: non-numeric argument to binary operator। यह तब हो सकती है जब आप ऐसे डेटा पर गणितीय क्रिया करें जिसमें गैर-आंकिक मान, जैसे strings या characters, शामिल हों।

इस ट्यूटोरियल में, मैं आपको बताऊंगा कि इस त्रुटि से कैसे निपटें और इसे कैसे ठीक करें। पहले मैं संक्षिप्त उत्तर दूंगा और फिर विस्तार से समझाऊंगा ताकि आप बेहतर समझ सकें कि यह त्रुटि क्यों होती है।

संक्षिप्त उत्तर: R में Non-Numeric Argument to Binary Operator त्रुटि कैसे ठीक करें

यदि आपके पास समय कम है, तो R में non-numeric argument to binary operator त्रुटि को ठीक करने का तरीका है कि अंकगणितीय क्रियाओं से पहले डेटा को numeric प्रकार में बदल दें। इससे यह सुनिश्चित होता है कि आपके डेटा के सभी तत्व गणितीय गणनाओं के लिए उपयुक्त हैं।

निम्न उदाहरण में, as.numeric() फ़ंक्शन सीधे characters वेक्टर को numeric में बदल देता है, जिससे जोड़ क्रिया बिना त्रुटि के हो जाती है।

characters <- c("5", "10", "15")

characters <- as.numeric(characters)

result <- characters + 10

print(result)

त्रुटि क्यों होती है

R में अंकगणितीय क्रियाएं numeric डेटा प्रकारों के साथ काम करने के लिए बनी हैं। जब आपको non-numeric argument to binary operator त्रुटि मिलती है, तो आमतौर पर इसका मतलब है कि आपने strings या factors जैसे non-numeric डेटा प्रकारों के साथ अंकगणितीय ऑपरेटरों का गलत उपयोग किया है। R के डेटा प्रकारों पर अधिक जानकारी के लिए हमारा Data Types in R ट्यूटोरियल पढ़ें।

यह कई सामान्य परिस्थितियों में हो सकता है:

  • Character strings पर क्रियाएं: जब आप टेक्स्ट डेटा पर अंकगणित करने की कोशिश करते हैं, तब यह त्रुटि हो सकती है।
  • Factor डेटा प्रकारों पर क्रियाएं: यह त्रुटि तब होती है जब R, खासकर डेटा आयात करते समय, data frames के भीतर strings को factors में बदल देता है, जिससे अनचाहे non-numeric प्रकार बन जाते हैं।
  • सूचियों या अन्य जटिल संरचनाओं पर क्रियाएं: जब आप lists या ऐसी संरचनाओं पर अंकगणितीय ऑपरेटरों का उपयोग करते हैं जो ऐसी क्रियाओं के लिए उपयुक्त नहीं हैं, तब भी यह त्रुटि होती है।

त्रुटि को पुन: उत्पन्न और ठीक कैसे करें

आइए एक सरल डेटासेट बनाते हैं और ऐसी क्रियाएं करते हैं जो जानबूझकर इस त्रुटि को ट्रिगर करें ताकि दिखा सकें कि यह कैसे होती है। फिर हम प्रत्येक मामले में त्रुटि को ठीक करेंगे।

Character strings के लिए त्रुटि को पुन: उत्पन्न और ठीक कैसे करें

पहले उदाहरण में, हमें यह त्रुटि संदेश मिलता है क्योंकि characters वेक्टर के तत्व numeric प्रकार के नहीं हैं, बल्कि character strings हैं।

characters <- c("5", "10", "15")

result <- characters + 10

print(result)

इसे ठीक करने के लिए, हम as.numeric() का उपयोग करके numeric में रूपांतरित करते हैं:

characters <- c("5", "10", "15")

characters <- as.numeric(characters)

result <- characters + 10

print(result)

Factors के लिए त्रुटि को पुन: उत्पन्न और ठीक कैसे करें

अगले उदाहरण में, हम factors के लिए त्रुटि को पुन: उत्पन्न करेंगे।

factors <- factor(c("5", "10", "15"))

result <- factors + 10

print(result)

इसे ठीक करने के लिए, हम पहले character में और फिर numeric में परिवर्तित करते हैं। ऐसा इसलिए क्योंकि R में factors को integer वेक्टर के रूप में संग्रहीत किया जाता है जिनके साथ character स्तरों का एक सेट जुड़ा रहता है।

जब आप किसी factor को सीधे as.numeric() से numeric में बदलते हैं, तो R वास्तविक character मानों के बजाय आंतरिक integer कोड लौटाता है, जो factor स्तरों का आंतरिक निरूपण है। पहले factor को character में बदलने से वास्तविक स्तर character strings के रूप में मिलते हैं, जिन्हें बाद में सही तरीके से numeric मानों में बदला जा सकता है।

factors <- factor(c("5", "10", "15"))

factors <- as.numeric(as.character(factors))

result <- factors + 10

print(result)

Lists के लिए त्रुटि को पुन: उत्पन्न और ठीक कैसे करें

अगले उदाहरण में, हम lists के लिए त्रुटि को पुन: उत्पन्न करेंगे। 

list_data <- list("5", "10", "15")

result <- list_data + 10

print(result)

इसे ठीक करने के लिए, हम तत्वों को निकालकर numeric में बदलते हैं। unlist() फ़ंक्शन सूची को वेक्टर में बदल देता है। 

list_data <- list("5", "10", "15")

list_data <- as.numeric(unlist(list_data))

result <- list_data + 10

print(result)

मिश्रित डेटा प्रकारों के लिए त्रुटि को पुन: उत्पन्न और ठीक कैसे करें

अगला उदाहरण थोड़ा अधिक जटिल है। पिछले किसी भी तरीकों से यहाँ काम नहीं बनेगा क्योंकि हमें "20a" मिलता है जिसे numeric मान में बदला नहीं जा सकता। 

इस स्थिति में sapply() फ़ंक्शन एक अच्छा समाधान देता है। यह हमारे वेक्टर के प्रत्येक तत्व पर एक निर्दिष्ट फ़ंक्शन लागू करता है। हमारे मामले में, हम ऐसा फ़ंक्शन परिभाषित करते हैं जो प्रत्येक तत्व को numeric मान में बदलने का प्रयास करता है।

mixed_data <- list("5", 10, "15", "20a")

numeric_data <- sapply(mixed_data, function(x) {
  if (is.numeric(x)) {
    return(x)
  } else if (!is.na(as.numeric(x))) {
    return(as.numeric(x))
  } else {
    return(NA)
  }
})

result <- numeric_data + 10

print(result)

R में functional programming पर अधिक जानकारी के लिए हमारा Intermediate Functional Programming with purrr कोर्स देखें। apply() परिवार के फ़ंक्शनों पर अधिक जानकारी के लिए हमारा R Apply Family पर ट्यूटोरियल पढ़ें। 

अतिरिक्त जानकारी

traceback के साथ डिबगिंग

जब कोई त्रुटि होती है, तो traceback() डिबगिंग के लिए उपयोगी साधन है। यह उन कॉल्स का क्रम देता है जो त्रुटि तक पहुंचे, जिससे आप सटीक विफलता बिंदु पहचान सकते हैं।

traceback()

इस कमांड को चलाने के बाद, R उन फ़ंक्शन कॉल्स का क्रम प्रिंट करेगा जो त्रुटि तक ले गए। इससे यह समझने में मदद मिल सकती है कि non-numeric डेटा कहाँ शामिल हो गया।

डेटा इनपुट विधियों की समीक्षा करें

आप यह भी दोबारा जाँच सकते हैं कि डेटा कैसे आयात किया गया है और सुनिश्चित करें कि उसे सही तरीके से बदला गया है। जब आप डेटा आयात करते हैं, खासकर CSV फ़ाइलों से, तो R स्वतः character डेटा को factors में बदल सकता है। अपने डेटा का सही आयात सुनिश्चित करने के लिए इस व्यवहार को नियंत्रित करना महत्वपूर्ण है।

# मान लें कि CSV से पढ़ा गया डेटा factors के रूप में गलत तरीके से आयात हुआ है
data <- read.csv("data.csv", stringsAsFactors = TRUE)

data$column <- as.numeric(as.character(data$column))

इस उदाहरण में, डेटा stringsAsFactors को TRUE पर सेट करके CSV फ़ाइल से आयात किया जाता है। फिर हम factor कॉलम को पहले character और बाद में numeric में बदलते हैं ताकि अंकगणितीय क्रियाओं के लिए सही डेटा प्रकार सुनिश्चित हो सके।

त्रुटि को कैसे रोका जाए

शर्तीय जाँच का उपयोग

इस त्रुटि से बचने में मदद के लिए, ऐसी शर्तीय जाँचें लागू करें जो सुनिश्चित करें कि डेटा प्रकार क्रियाओं के लिए उपयुक्त हैं। किसी भी क्रिया से पहले डेटा प्रकार की जाँच करना और आवश्यक रूपांतरणों को शर्तानुसार संभालना अच्छी प्रथा है।

निम्न उदाहरण में, हम जाँचते हैं कि डेटा numeric है या नहीं। यदि नहीं, तो हम अंकगणितीय क्रिया से पहले उसे numeric में बदल देते हैं। इससे गलत डेटा प्रकार पकड़ में आते हैं और उन्हें उचित रूप से numeric में बदला जाता है। 

data <- "20"

if(is.numeric(data)) {
  result <- data + 10
} else {
  data <- as.numeric(data)
  result <- data + 10
}

print(result)

शर्तीय जाँच का उदाहरण

निष्कर्ष और अतिरिक्त संसाधन

आशा है कि यह लेख आपकी समस्या सुलझाने में सहायक रहा होगा। non-numeric argument to binary operator जैसी त्रुटियाँ प्रोग्रामिंग में आम हैं, और उनसे निपटना जानना महत्वपूर्ण है। डेटा प्रकारों और सही रूपांतरणों को समझना इस त्रुटि को रोकने में मदद कर सकता है।

R में मदद के लिए, आप हमारे R चीट शीट्स देख सकते हैं या हमारा मुफ्त Introduction to R कोर्स करें, या गहराई से सीखने के लिए हमारा R Programming Skill Track आज़माएँ।

Austin Chia

लेखक

Austin Chia

मैं ऑस्टिन हूँ—एक ब्लॉगर और टेक राइटर, जिसके पास स्वास्थ्य सेवा क्षेत्र में डेटा वैज्ञानिक और डेटा विश्लेषक के रूप में वर्षों का अनुभव है। जीवविज्ञान की पृष्ठभूमि से अपनी टेक यात्रा शुरू करने के बाद, अब मैं अपने टेक ब्लॉग के माध्यम से दूसरों को भी यही बदलाव करने में मदद करता हूँ। प्रौद्योगिकी के प्रति मेरे जुनून ने मुझे दर्जनों SaaS कंपनियों के लिए लिखने के लिए प्रेरित किया है, जहाँ मैं अपनी अनुभूतियाँ साझा करता हूँ और दूसरों को प्रेरित करता हूँ।

अक्सर पूछे जाने वाले प्रश्न

Non-numeric argument क्या होता है?

Non-numeric argument वह मान या चर है जिसे R जैसी प्रोग्रामिंग भाषा में संख्या के रूप में व्याख्यायित नहीं किया जा सकता।

मैं अपने कोड में इस त्रुटि को कैसे पहचानूँ?

त्रुटि संदेश में आमतौर पर "non-numeric argument" वाक्यांश शामिल होता है, जिससे इसे पहचानना आसान हो जाता है।

क्या यह त्रुटि केवल R में होती है?

नहीं, यह त्रुटि अन्य प्रोग्रामिंग भाषाओं में भी हो सकती है। हालाँकि, त्रुटि संदेश अलग तरह से दिखाई दे सकता है।

क्या इस त्रुटि से पूरी तरह बचने का कोई तरीका है?

हाँ, बशर्ते आप सुनिश्चित करें कि आपके कोड में सभी मान और चर उपयोग किए जा रहे विशेष ऑपरेटर के साथ संगत हों।

क्या मैं non-numeric arguments के साथ किसी भी प्रकार के ऑपरेटर का उपयोग कर सकता हूँ?

नहीं, कुछ ऑपरेटर केवल संख्यात्मक मानों के साथ ही उपयोग किए जा सकते हैं और non-numeric arguments दिए जाने पर यह त्रुटि देंगे।

विषय