[Rd] "+" operator on characters revisited

Gabor Grothendieck ggrothendieck at gmail.com
Mon Jan 24 20:30:29 CET 2011


On Mon, Jan 24, 2011 at 2:15 PM, Davor Cubranic <cubranic at stat.ubc.ca> wrote:
> On 2011-01-23, at 4:34 AM, Gabor Grothendieck wrote:
>
>> On Sun, Jan 23, 2011 at 6:56 AM, Vitalie S. <spinuvit.list at gmail.com> wrote:
>>> Gabor Grothendieck <ggrothendieck at gmail.com> writes:
>>>
>>>> Also the gsubfn supports quasi perl style string interpolation that
>>>> can sometimes be used to avoid the use of paste in the first place.
>>>> Just preface the function in question by fn$ like this:
>>>>
>>>> library(gsubfn)
>>>> fn$cat("pi = $pi\n")
>>>
>>> Thanks for the tip. Not bad indeed.
>>> Almost as readable as
>>>
>>> cat("pi = " + pi + "\n")
>>
>> To me the + can be substantially less readable.  The need to
>> repeatedly quote everything makes it just as bad as paste.  Compare
>> the following and try to figure out if there is an error in quoting in
>> the + and paste solutions.  Trying to distinguish the single and
>> double quotes is pretty difficult but simple in the fn$ and sprintf
>> solutions.  Even if there were no quotes the constant need to
>> interpose quotes makes it hard to read.
>
> That may be a matter of taste, but FWIW it seems that shell-style string interpolation (using the dollar prefix) has going out of style in recent scripting languages. Ruby uses the expression substitution construct ("#{expr}"), while Python has "str.format", both allowing arbitrary expressions.
>

fn$ supports that too using `...`

> library(sqldf)
> fn$sqldf("select * from BOD where demand > `mean(BOD$demand)` limit 2")
  Time demand
1    3     19
2    4     16


> And most editors have syntax highlighting that distinguishes strings from other program elements. This makes quoting errors pretty obvious.
>

That only makes it slightly easier to handle the mess.  Its better to
get rid of the quotes in the first place.

-- 
Statistics & Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com



More information about the R-devel mailing list