[ESS] [R] .Rd vs. .R, was: matrix multiplication

Marc Schwartz marc_schwartz at me.com
Thu Dec 6 21:57:13 CET 2012


On Dec 6, 2012, at 2:40 PM, Vitalie Spinu <spinuvit at gmail.com> wrote:

>>> Kasper Daniel Hansen <kasperdanielhansen at gmail.com>
>>> on Thu, 6 Dec 2012 15:09:51 -0500 wrote:
> 
>> This is semi-tangential.  One thing I really miss from readline is the
>> ability to designate paths like
> 
>> load("~khansen/data.rda")
> 
> You mean load("~/khansen/data.rda")? Never heard of ~foo to be
> substituted, with readline or otherwise. R substitutes ~/foo and ../foo
> correctly in emacs session.


Just to confirm Vitalie, it is ~username/PATH.TO.FILE/FILENAME. That is a standard part of the bash shell with readline support:

 http://www.gnu.org/software/bash/manual/html_node/Tilde-Expansion.html


On OSX, for example:

> capabilities("cledit")
cledit 
  TRUE 

> path.expand("~/.RData")
[1] "/Users/marcschwartz/.RData"

> path.expand("~marcschwartz/.RData")
[1] "/Users/marcschwartz/.RData"


However, in ESS:

> capabilities("cledit")
cledit 
 FALSE 

> path.expand("~/.RData")
[1] "/Users/marcschwartz/.RData"

> path.expand("~marcschwartz/.RData")
[1] "~marcschwartz/.RData"


Note that the second incantation is not properly expanded and this is due to the lack of readline support when R is run under ESS by default.

This is explicitly mentioned in ?path.expand:

On \emph{some} Unix builds of R, a leading ~user will expand to the home directory of user, but not on Unix versions without readline installed, nor if R is invoked with --no-readline.

In an interactive session capabilities("cledit") will report if readline is available.


Regards,

Marc Schwartz


> As to readline, I am not aware of a single feature that would be missing
> in emacs comint buffers. Limitations you might see are those imposed by
> the dumbness of emacs terminal. Particularly interactive features (like
> less filter) don't work.
> 
>    Vitalie
> 
>> ie. use the ~khansen to mean home dir of user khansen.  I want to use
>> this all the time, since I sit on a multiuser system and frequently
>> load stuff from other peoples homedir.
> 
>> My understanding is that readline is what makes this work in normal
>> command line R, and this is why it doesn't work inside of Emacs.
> 
>> Is there a way to address this particular issue?
> 
>> Kasper
> 
>> On Thu, Dec 6, 2012 at 2:53 PM, Vitalie Spinu <spinuvit at gmail.com> wrote:
>>>>> Christian Hoffmann <c-w.hoffmann at sunrise.ch>
>>>>> on Thu, 06 Dec 2012 14:29:02 +0100 wrote:
>>> 
>>> [...]
>>> 
>>> 
>>>> (3) I found out that M-x R  starts R --no-readline , which I want to avoid!  I
>>>> want to browse the history in a (mini?) buffer to search and select before
>>>> execution, using C-up-arrow is cumbersome. I am lazy !
>>> 
>>> This is comint-previous-input and is also bound to M-p by default, could
>>> not be faster than that. Comint-previous-matching-input-from-input is
>>> much more useful IMO, so I would recommend this in your .emacs:
>>> 
>>> (define-key comint-mode-map [(meta ?p)] 'comint-previous-matching-input-from-input)
>>> (define-key comint-mode-map [(meta ?n)] 'comint-next-matching-input-from-input)
>>> 
>>> These commands are bound to C-c M-r and C-c M-s by default.
>>> 
>>> Vitalie



More information about the ESS-help mailing list