[R] R annoyances

Liaw, Andy andy_liaw at merck.com
Fri May 20 15:45:04 CEST 2005


> From: Philippe Grosjean 
> 
> Hello,
> Regarding use of parenthesis, it is true that R is much better with 
> f(10) != f[10] != f[[10]], where Matlab is a little 
> confusing. Also, in 
> Matlab, you can use some functions without (), further adding to the 
> confusion (the only example that comes to my mind in R is the 
> use of '?' 
> as shortcut for help()).
> 
> However, there is still a double use of () in R: it is both used for 
> enclosing function arguments and for grouping operations. One 
> language 
> has a syntax that makes a totally unambiguous use of [], () and {} is 
> Mathematica: [] is for subscript, {} is for function 
> arguments and () is 
> for grouping... but Mathematica code is really a pain to 
> typeset and read.
> 
> So, all in all, I really like the S langage syntax: it is 
> very readable 
> and reasonably rigid...
> 
> Regarding T and F, I took the habit to *always* type them 
> TRUE or FALSE. 
> Again, very readable and not confusing at all. If T and F as 
> equivalent 
> to TRUE and FALSE would ever be deprecated and then defunct 
> in further 
> versions of R, well, I would not complain about it!
> 
> The only aspect I don't like is a too loosely use of the dot in 
> functions: both in functions names, in object classes and in generic 
> functions / methods. Hence, we have for instance: 'data.frame', 
> 'help.search' and 'summary.matrix'... just guess which one is 
> an object 
> class, which one is an ordinary function and which one is a S3 method 
> (OK, S4 solves somehow the problem)? It would have been much 
> better to 
> *reserve* the use of a dot in a function name as a separator 
> between the 
> name of the generic function and the class to which it applies. Thus, 
> 'summary.matrix' would have been correct, but both 'data.frame' and 
> 'help.search' should have been spelled differently, perhaps 
> 'dataframe' 
> and 'helpSearch'. Just a dream... because 'data.frame' will of course 
> never be spelled differently!!!

Don't give up to easily:  If "_" can be done away as assignment operator,
I'd guess anything is fair game...

Andy

> Best,
> 
> Philippe Grosjean
> 
> 
> Jan T. Kim wrote:
> > On Fri, May 20, 2005 at 08:14:24AM -0400, Liaw, Andy wrote:
> > 
> >>>From: Robin Hankin
> >>>
> >>>On May 20, 2005, at 11:00 am, Jan T. Kim wrote:
> >>>
> >>>
> >>>>On Thu, May 19, 2005 at 03:10:53PM -0400, John Fox wrote:
> >>>>
> >>>>
> >>>>>Since you can use variables named c, q, or t in any 
> event, I don't 
> >>>>>see why
> >>>>>the existence of functions with these names is much of an 
> >>>
> >>>impediment.
> >>>
> >>>>True, particularly since I'm not too likely to use these 
> >>>
> >>>variables for 
> >>>
> >>>>(local)
> >>>>functions, and variables of other types don't prevent 
> >>>
> >>>functions from 
> >>>
> >>>>working.
> >>>>(I thought this was a problem... I must be spoilt by 
> >>>
> >>>recently having 
> >>>
> >>>>to read
> >>>>too much Matlab code, where parentheses are used to both enclose 
> >>>>subscripts and
> >>>>parameter lists, thus rendering subscript expressions and 
> function 
> >>>>calls
> >>>>syntactically indistinguishable.)
> >>>
> >>>
> >>>Heh, I'm a recovering Matlab  user too.  This is sooooooooooo true!
> >>>
> >>>In Matlab:
> >>>
> >>>f(10)    # function f() evaluated at 10
> >>>f(10)    # 10th element of vector f.  confusing!!
> >>>
> >>>R uses round brackets in two unrelated ways:
> >>>
> >>>  4*(1+2)  --- using "(" and ")" to signify grouping
> >>>f(8)  function f() evaluated at 8.
> >>>
> >>>where there is no reason to use the same parenthesis 
> symbol for both 
> >>>tasks.
> >>
> >>The same is done in Fortran/C/C++/Java/Python and God knows how many
> >>others...
> > 
> > 
> > And this is different from the subscripting / function call 
> ambiguity,
> > as these languages (to the extent I know them) are designed 
> such that
> > parentheses for precedence control are syntactically distinguishable
> > from those used for function parameter lists: If the 
> opening parenthesis
> > is preceded by an identifier, that identifier is a function name and
> > the parenthesis opens a parameter list.
> > 
> > (Python is a somewhat messy case, though, because it uses 
> parentheses
> > for tuples too.)
> > 
> > Best regards, Jan
> 
> 
>




More information about the R-help mailing list