Similar to Duncan's example, if you have a script "test.R" which looks like so:
==== start script ===== a1 <- 1:10 a2 <- 101:122 plot(a1, a1) plot(a1, a2) ==== end script ====== You can source it one way: R> source('test.R', keep.source=TRUE) Error in xy.coords(x, y, xlabel, ylabel, log) : 'x' and 'y' lengths differ R> traceback() 8: stop("'x' and 'y' lengths differ") 7: xy.coords(x, y, xlabel, ylabel, log) 6: plot.default(a1, a2) 5: plot(a1, a2) at test.R#4 ### <- Error is on line 4 4: eval(expr, envir, enclos) 3: eval(ei, envir) 2: withVisible(eval(ei, envir)) 1: source("test.R", keep.source = TRUE) If you `source("test.R", keep.source=FALSE)`, you will see that the line number is not reported. Also: R> library(devtools) R> options(keep.source=TRUE) R> install_github("BadPackage", "lianos") R> plot.me(1:10) Error in xy.coords(x, y, xlabel, ylabel, log) : 'x' and 'y' lengths differ R> traceback() 5: stop("'x' and 'y' lengths differ") 4: xy.coords(x, y, xlabel, ylabel, log) 3: plot.default(x, c(x, 0), pch = 16) 2: plot(x, c(x, 0), pch = 16) at test.R#4 #### <- BAM 1: plot.me(1:10) HTH, -steve On Sun, Dec 2, 2012 at 5:08 PM, Duncan Murdoch <murdoch.dun...@gmail.com> wrote: > On 12-12-02 5:02 PM, John Sorkin wrote: >> >> Gentleman, >> This thread has been of great interest. Perhaps I missed part of it, but >> do far I have not seen an example of code that has line numbers that >> demonstrates how one can (in some instances) recover the line number of >> an error. Can I impose upon the people who contributed to this thread to >> post example code? The question if very important, and the discussion >> about solutions has been somewhat abstract to this point. > > > From my post this morning: > > >> For example, in Windows, if I put this code into the clipboard: >> >> f <- function() { >> stop("this is the error") >> } >> >> g <- function() { >> f() >> } >> >> g() >> >> then run source("clipboard") followed by traceback(), this is what I see: >> >> > source("clipboard") >> Error in f() (from clipboard#2) : this is the error >> > traceback() >> 7: stop("this is the error") at clipboard#2 >> 6: f() at clipboard#6 >> 5: g() at clipboard#9 >> 4: eval(expr, envir, enclos) >> 3: eval(ei, envir) >> 2: withVisible(eval(ei, envir)) >> 1: source("clipboard") >> >> You can ignore entries 1 to 4; they are part of source(). Entries 5, 6, >> and 7 each tell the line of the script where they were parsed. >> >> Duncan Murdoch > > > >> Thank you, >> John >> >> John David Sorkin M.D., Ph.D. >> Chief, Biostatistics and Informatics >> University of Maryland School of Medicine Division of Gerontology >> Baltimore VA Medical Center >> 10 North Greene Street >> GRECC (BT/18/GR) >> Baltimore, MD 21201-1524 >> (Phone) 410-605-7119 >> (Fax) 410-605-7913 (Please call phone number above prior to faxing)>>> >> Milan Bouchet-Valat <nalimi...@club.fr> 12/2/2012 4:00 PM >>> >> Le dimanche 02 décembre 2012 à 14:21 -0500, Duncan Murdoch a écrit : >> > On 12-12-02 9:52 AM, Milan Bouchet-Valat wrote: >> > > Le dimanche 02 décembre 2012 à 09:02 -0500, Duncan Murdoch a écrit : >> > >> On 12-12-02 8:33 AM, Milan Bouchet-Valat wrote: >> > >>> Le dimanche 02 décembre 2012 à 06:02 -0500, Steve Lianoglou a écrit >> : >> > >>>> Hi, >> > >>>> >> > >>>> On Sun, Dec 2, 2012 at 12:31 AM, Worik R <wor...@gmail.com> wrote: >> > >>>>> What I mean is how do I get the R compilation or execution >> process to spit >> > >>>>> out a line number with errors and warnings? >> > >>> Indeed, I often suffer from the same problem when debugging R >> code too. >> > >>> This is a real issue for me. >> > >>> >> > >>>> As Duncan mentioned already, you can't *always* get a line >> number. You >> > >>>> can, however, usually get enough context around the failing call >> for >> > >>>> you to be able to smoke the problem out. >> > >>> What are the cases where you cannot get line numbers? Duncan said >> > >>> source()ed code comes with line numbers, but what's the more >> general >> > >>> rule? >> > >> >> > >> The general rule is that parse() needs to be called with the >> "srcfile" >> > >> argument set to a srcfile object. source() does that by default. >> > > OK. But isn't it technically possible to compute a line number even >> when >> > > no source file is present? >> > >> > Yes, you don't really need to have a file present, you just need a >> > srcfile object. For example, on Windows when you use >> > source("clipboard"), there's no file, just the system clipboard. >> > >> > If you call fix() on any function, you will >> > > get something like a source file even if srcfile was not set. >> > >> > Yes, and then you can call source on that object, and you'll get line >> > number information attached, relative to whatever you sourced. >> > >> > >> > So it >> > > could make sense to have a line number referring to what you would >> see >> > > in fix(). Or at least, the last executed line when calling browser() >> or >> > > when using options(error=recover), like gdb does. >> > >> > The thing is that if you didn't attach the line number information to >> > the code, then it's not there. R can't figure out after the fact where >> > the code came from. It needs to have the debug info in place when it >> > runs it. How could R figure out where some expression came from that >> it >> > happens to be executing? Using eval() on a constructed expression in a >> > function is not all that uncommon, but to the evaluator, it looks just >> > like any other evaluation. >> OK. >> >> > > This could be especially useful for packages that were not installed >> > > with keep.source=TRUE. It could even help getting more useful error >> > > messages on R-help... >> > >> > If you're debugging a package, then why not install it with >> > keep.source=TRUE? >> Of course. I just wondered whether this step could possibly be avoided. >> It can be useful to have debugging details when casual users report a >> bug, without reinstalling the package. Not a big deal, though. >> >> >> Regards >> >> ______________________________________________ >> R-help@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide >> http://www.R-project.org/posting-guide.html >> and provide commented, minimal, self-contained, reproducible code. >> >> *_Confidentiality Statement:_* >> >> This email message, including any attachments, is for ...{{dropped:7}} > > > ______________________________________________ > R-help@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. -- Steve Lianoglou Graduate Student: Computational Systems Biology | Memorial Sloan-Kettering Cancer Center | Weill Medical College of Cornell University Contact Info: http://cbio.mskcc.org/~lianos/contact ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.