आप पिछली त्रुटि कहां से पता लगाने के लिए traceback()
का उपयोग कर सकते हैं। आम तौर पर यह आपको आपके फ़ंक्शन में किए गए कॉल पर इंगित करेगा। तब मैं आमतौर पर उस बिंदु पर browser()
डालता हूं, फिर फ़ंक्शन चलाता हूं और देखता हूं कि क्या गलत हो रहा है।
f2 <- function(x)
{
if (x==1) "foo"
}
f <- function(x)
{
f2(x)
}
ध्यान दें कि f2()
लंबाई 1
का एक तर्क मान लिया गया है:
उदाहरण के लिए, यहाँ दो कार्य कर रहे हैं। हम f
दुरुपयोग कर सकते हैं:
> f(NULL)
Error in if (x == 1) "foo" : argument is of length zero
अब हम traceback()
उपयोग कर सकते हैं क्या गलत हुआ पता लगाने के लिए:
> traceback()
2: f2(x) at #3
1: f(NULL)
संख्या का मतलब है कितना गहरा हम नेस्टेड कार्यों में कर रहे हैं। तो हम देखते हैं कि f
f2
पर कॉल करता है और यह 3
पर एक त्रुटि देता है। बहुत स्पष्ट। हम f
को browser
के साथ फिर से सौंप सकते हैं f2
कॉल के पहले इसे इनपुट करने के लिए कॉल करें। browser()
बस आपको एक फ़ंक्शन निष्पादित करने और अपने पर्यावरण में चारों ओर देखने की अनुमति देता है। debug
और debugonce
के समान, सिवाय इसके कि आपको उस बिंदु तक निष्पादित करने की आवश्यकता नहीं है जब तक आपको पता न हो कि कुछ गलत हो जाता है।
स्रोत
2012-11-19 14:39:59
मुझे डीबग करने का सबसे आसान तरीका लाइन लाइन कोड के माध्यम से कदम उठाना है। यदि आपकी त्रुटि आपके द्वारा लिखे गए फ़ंक्शन से आ रही है, तो आप इसे 'debugonce (function_name)' का उपयोग करके डीबग कर सकते हैं। यह आपको फ़ंक्शन के दायरे के अंदर एक मिनी आर सत्र देगा। – Justin
यही वह है जो मैं कर रहा हूं, लेकिन मुझे लगता है कि मैं कुछ ऐसा करने पर बहुत अधिक समय बिताता हूं जो स्वचालित हो सकता है। – Tim