On 04.01.2013 14:03, Duncan Murdoch wrote:
> On 13-01-04 8:32 AM, Matthew Dowle wrote:
>>
>> On Fri, Jan 3, 2013, Bert Gunter wrote
>>> Well...
>>>
>>> On Thu, Jan 3, 2013 at 10:00 AM, ivo welch <ivo.welch <at>
>>> anderson.ucla.edu> wrote:
>>>>
>>>> Dear R developers---I just spent half a day debugging an R
>>>> program,
>>>> which had two bugs---I selected the wrongly named variable,
which
>>>> turns out to have been a scalar, which then happily multiplied
as
>>>> if
>>>> it was a matrix; and another wrongly named variable from a data
>>>> frame,
>>>> that triggered no error when used as a[["name"]] or a$name .
>>>> there
>>>> should be an option to turn on that throws an error inside R
when
>>>> one
>>>> does this. I cannot imagine that there is much code that wants
to
>>>> reference non-existing columns in data frames.
>>>
>>> But I can -- and do it all the time: To add a new variable, "d"
to
>>> a
>>> data frame, df, containing only "a" and "b" (with 10 rows,
say):
>>>
>>> df[["d"]] <- 1:10
>>
>> Yes but that's `[[<-`. Ivo was talking about `[[` and `$`; i.e.,
>> select
>> only not assign, if I understood correctly.
>>
>>>
>>> Trying to outguess documentation to create error triggers is a
very
>>> bad idea.
>>
>> Why exactly is it a very bad idea? (I don't necessarily disagree,
>> just
>> asking
>> for more colour.)
>>
>>> R already has plenty of debugging tools -- and there is even a
>>> "debug"
>>> package. Perhaps you need a better programming editor/IDE. There
>>> are
>>> several listed on CRAN, RStudio, etc.
>>
>> True, but that relies on you knowing there's a bug to hunt for.
What
>> if
>> you
>> don't know you're getting incorrect results, silently? In a
similar
>> way
>> that options(warn=2) turns known warnings into errors, to enable
you
>> to
>> be
>> more strict if you wish,
>
> I would say the point of options(warn=2) is rather to let you find
> the location of the warning more easily, because it will abort the
> evaluation.
True but as well as that, I sometimes like to run production systems
with
options(warn=2). I'd prefer some tasks to halt at the slightest hint
of
trouble than write a warning silently to a log file that may not be
looked
at. I think of that as being more strict, more robust. Since
option(warn=2)
is set even when there is no warning, to catch if one arises in
future.
Not
just to find it more easily once you know there is a warning.
> I would not recommend using code that issues warnings.
Not sure what you mean here.