Sounds good for me.
Thanks.

2013/3/27 Duncan Murdoch <murdoch.dun...@gmail.com>

> On 13-03-26 6:45 PM, Hadley Wickham wrote:
>
>> It turns out the reason for this is pretty simple:
>>
>> sys.source does:
>> for (i in exprs) eval(i, envir)
>>
>> where source basically does
>> n <- length(exprs)
>> for (i in seq_len(n)) eval(expr[i], envir)
>>
>> so the problem is presumably related to the way that for strips
>> attributes.
>>
>
> That's part of it, but there are also different defaults for keep.source.
>  It needs to be TRUE or the error location won't be known.
>
> I'll fix the difference you noticed after 3.0.0 is released; I think it is
> not serious enough to slip in at this point.
>
> Duncan Murdoch
>
>
>
>> Hadley
>>
>> On Tue, Mar 19, 2013 at 4:03 AM, Renaud Gaujoux
>> <ren...@mancala.cbio.uct.ac.za**> wrote:
>>
>>> Hi,
>>>
>>> is there a way to retrieve the line number of where en error occurred
>>> when
>>> sourcing a file in a tryCatch statement? Is it stored somewhere
>>> accessible?
>>> It is not found in the error object.
>>>
>>> Consider the following code/output and note the difference in the
>>> traceback
>>> between source (has line number) and sys.source (has no line number).
>>>
>>> Thank you,
>>> Renaud
>>>
>>>
>>> ########
>>> # code
>>> ########
>>> codefile <- tempfile()
>>> write("# some comment
>>> # some good lines
>>> a <- 1
>>> # a bad line
>>> stop('an error')
>>> # another good line
>>> b <- 2
>>> ", file=codefile)
>>>
>>> # with source() the line number is displayed
>>> source(codefile)
>>> traceback()
>>> tryCatch(source(codefile), error= function(e){ str(e) })
>>>
>>> # with sys.source() the line number is _not_ displayed
>>> e <- new.env()
>>> sys.source(codefile, e)
>>> traceback()
>>>
>>> sessionInfo()
>>>
>>> #####
>>> # output
>>> #####
>>>
>>>  codefile <- tempfile()
>>>> write("# some comment
>>>>
>>> + # some good lines
>>> + a <- 1
>>> + # a bad line
>>> + stop('an error')
>>> + # another good line
>>> + b <- 2
>>> + ", file=codefile)
>>>
>>>> # with source() the line number is displayed
>>>> source(codefile)
>>>>
>>> Error in eval(expr, envir, enclos) : an error
>>>
>>>> traceback()
>>>>
>>> 5: stop("an error") at file46641af8754#5
>>> 4: eval(expr, envir, enclos)
>>> 3: eval(ei, envir)
>>> 2: withVisible(eval(ei, envir))
>>> 1: source(codefile)
>>>
>>>> tryCatch(source(codefile), error= function(e){ str(e) })
>>>>
>>> List of 2
>>>   $ message: chr "an error"
>>>   $ call   : language eval(expr, envir, enclos)
>>>   - attr(*, "class")= chr [1:3] "simpleError" "error" "condition"
>>>
>>>>
>>>> # with sys.source() the line number is _not_ displayed
>>>> e <- new.env()
>>>> sys.source(codefile, e)
>>>>
>>> Error in eval(expr, envir, enclos) : an error
>>>
>>>> traceback()
>>>>
>>> 4: stop("an error")
>>> 3: eval(expr, envir, enclos)
>>> 2: eval(i, envir)
>>> 1: sys.source(codefile, e)
>>>
>>>>
>>>> sessionInfo()
>>>>
>>> R version 2.15.3 (2013-03-01)
>>> Platform: i686-pc-linux-gnu (32-bit)
>>>
>>> locale:
>>>   [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
>>>   [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
>>>   [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8
>>>   [7] LC_PAPER=C                 LC_NAME=C
>>>   [9] LC_ADDRESS=C               LC_TELEPHONE=C
>>> [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
>>>
>>> attached base packages:
>>> [1] stats     graphics  grDevices utils     datasets  methods   base
>>>
>>>          [[alternative HTML version deleted]]
>>>
>>> ______________________________**________________
>>> R-devel@r-project.org mailing list
>>> https://stat.ethz.ch/mailman/**listinfo/r-devel<https://stat.ethz.ch/mailman/listinfo/r-devel>
>>>
>>
>>
>>
>>
>
>

        [[alternative HTML version deleted]]

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to