[R] Google style
Martin Maechler
maechler at stat.math.ethz.ch
Wed Sep 2 09:06:14 CEST 2009
>>>>> Duncan Murdoch <murdoch at stats.uwo.ca>
>>>>> on Tue, 01 Sep 2009 08:02:57 -0400 writes:
> On 9/1/2009 6:37 AM, (Ted Harding) wrote:
>> On 01-Sep-09 10:25:53, Duncan Murdoch wrote:
>>> Jim Lemon wrote:
>>>> Duncan Murdoch wrote:
>>>>> On 8/31/2009 11:50 AM, Mark Knecht wrote:
>>>>> On Mon, Aug 31, 2009 at 6:36 AM, Terry Therneau<therneau at mayo.edu>
>>>>> wrote:
>>>>> <SNIP>
>>>>>>> The authors borrowed so much else from C, the semicolon would have
>>>>>>> been good too.
>>>>>>>
>>>> Something I have thought myself.
>>>>
>>>>> I know real R coders will chuckle
>>>>>
>>>>> I'd say cringe, rather than chuckle. This is going to make you waste
>>>>> a lot of time some day, when you stare and stare at code like Terry's
>>>>> and can't figure out what's wrong with it:
>>>>>
>>>>> zed <- function(x,y,z) {
>>>>> x + y
>>>>> +z;
>>>>> }
>>>>>
>>>>> The value of the function is +z, not x+y+z, even though the C part of
>>>>> your brain made you type it that way and reads it as one statement in
>>>>> the body, not two.
>>>>>
>>>> This is getting interesting. One habit I have developed in R to
>>>> emphasize a line continuation is to always write the above as:
>>>>
>>>> zed<-function(x,y,z) {
>>>> x+y+
>>>> z
>>>> }
>>>>
>>>
>>> That's a good habit. An alternative is to put parentheses around the
>>> expression:
>>>
>>> (x + y
>>> + z)
>>>
>>> will work.
>>>> The trailing operator signalling to me and the interpreter that
>>>> there's more to come. A semicolon after the z would be innocuous.
>>>> Now I know that this marks me as a crabby old fart who learned
>>>> to program on Hollerith cards where there had to be firm
>>>> conventions on when a line of code ended. Still, given the moiety
>>>> of global warming attributable to endless discussions about how
>>>> many spaces should be used for indentation, I think the use of
>>>> the semicolon as a personal aid to interpretation is at worst a
>>>> harmless affectation.
>>>
>>> I think it's worse. To me, it's like putting in a comment that is
>>> wrong, or writing code like this:
>>>
>>> one <- 2
>>> x <- x + one
>>>
>>> Code has meaning, it's not just a bunch of binary instructions to the
>>> computer. If the meaning and the look of the code clash, it is going
>>> to lead to problems.
>>>
>>> Duncan Murdoch
>>
>> And surely that is precisely the point of Jim's use of ";"!
>> It is, in effect, ignored by R; but to Jim it means "This marks the
>> end of a command." Surely useful, and surely not in the same league
>> as "a comment that is wrong". You may see it as noise, but then
>> you can filter it out.
> I think you're missing the point. Using C-like syntax in R is
> misleading because you will think it has C-like meaning. You will read
> x + y
> + z;
> as one statement, not two. (Actually you could argue that in R there are
> three statements there, but the third one is empty).
> This is harmful in the same way using misleading variable names is
> harmful: as long as you're paying attention you'll get it right, but
> when you are working on a hard problem and can't devote enough neurons
> to this particular task, you'll get it wrong, and have a hard-to-spot
> bug in your code. You'll decide you need to split a statement across
> two lines, and write it in C style like the statements above, instead of
> in correct R syntax.
> Duncan Murdoch
I very strongly agree with Duncan on his very points.
In addition, note that the extra noise ("horrible end line ';'")
not only adds to the global warming ;-) but also slightly slows
the parsing and hence total execution time of your code ...
even more global warming ...
Martin Maechler
>> As one COF to another, I have to say that Jim's posting took me
>> back to the early days of my own evolution. That was dandy!
>> (Dinosaurs are not dead yet).
>>
>> Ted.
More information about the R-help
mailing list