[R] syntax for extending a line in a script??

Brian Diggs diggsb at ohsu.edu
Thu Jan 13 00:08:21 CET 2011


On 1/12/2011 2:46 PM, Mike Williamson wrote:
> Hello,
>
>      A hopefully simple question.  I use 'R' through emacs, but I suspect the
> following would occur with any manner of text editor:
>
>     - my editor has a normally quite handy feature where it will
>     automatically indent to the appropriate level when I start a new line.
>     However, this occasionally creates cases where there is no friendly way to
>     break a long line of code into two lines which still function as one
>     command.  Therefore, I need a nice way to be able to flag 'R' to know that
>     the code is continuing on the next line.  Let me explain via example:
>
>          numericColumns<- names(listOfDataFrames[[myDF]][,columnsOI])
>                      [sapply(listOfDataFrames[[myDF]][,columnsOI],
> is.numeric) ]

You can put the right hand side of the assignment in parentheses. Then 
even with the same breaks, the first line is not complete, so R will 
continue parsing.  An emacs still indents reasonably. (I added a second 
line break to try and avoid email wrapping affecting things).

numericColumns <- (names(listOfDataFrames[[myDF]][,columnsOI])
                    [sapply(listOfDataFrames[[myDF]][,columnsOI],
                            is.numeric)])

>      As you can see in this case, I would *like* for these 2 lines of code to
> be read as 1 line, but since the "names(<blah>)" command is sufficiently a
> command on its own, 'R' see this as a completed line of code.  I could try
> to break it up at different points, but emacs (and other text editors) takes
> a guess as to the most intelligent way to indent, so that if I were to write
> something like:
>
>          numericColumns<- names(listOfDataFrames[[myDF]][,columnsOI])
> [sapply(
>                        listOfDataFrames[[myDF]][,columnsOI], is.numeric) ]
>
>
> it would actually indent something more like this:
>
>          numericColumns<- names(listOfDataFrames[[myDF]][,columnsOI])
> [sapply(
>
> listOfDataFrames[[myDF]][,columnsOI], is.numeric) ]
>
>
> and as you can see, that doesn't help the issue of preventing the code from
> wrapping around (and therefore doesn't help readability).  Is there some
> simple way to flag that the next line is continuing?  Something like
> python's "\" at the end of a line?  I tried wrapping the whole thing around
> curly braces { } but that didn't work, either.

Putting the right hand side in curly braces might work too.  That would 
turn it into a code block, which should evaluate to whatever the last 
statement in the code block is (which in this case is the only 
statement).  I wouldn't be surprised if there is some case where curly 
braces might lead to a different result; parentheses shouldn't (but I 
may be wrong).

>                                             Thanks!
>                                                     Mike

-- 
Brian S. Diggs, PhD
Senior Research Associate, Department of Surgery
Oregon Health & Science University



More information about the R-help mailing list