[ESS] Feature idea: insert expression before <- at point

Sven Hartenstein ||@t@ @end|ng |rom @venh@rten@te|n@de
Wed May 1 20:22:53 CEST 2019


Thank you, Jeremie! I will try these functions.
r/eval-no-assign-r-fun-end indeed looks like a cool idea.

Sven

Am 01.05.19 um 09:42 schrieb Jeremie Juste:
> 
> Hello
> 
> I can buy you this feature for a one liner
> data[ data[,"columnB"] > 123 ,"columnA"] <- gsub("xxx", "yyy",_POINT_
> ,fixed=TRUE)
> 
> To do this you can use the function  r/copy-left-of-assign-r-fun-end
> but you will have to load the function r/get-begin-of-line-point as
> well (see below)
> 
> I have also included r/eval-no-assign-r-fun-end which evaluate an
> expression at the right of the assign operator. It is quit handy
> 
> 
> (defun r/get-begin-of-line-point ()
>    (interactive)
>    (save-excursion
>      (beginning-of-line)
>       (point)))
> 
> 
> (defun r/eval-no-assign-r-fun-end ()
>    "eval expression right of <-"
>    (interactive)
>    (setq begin (point))
>    (save-excursion
>      (re-search-backward "<- " (r/get-begin-of-line-point))
>      (forward-char 3)
>      (setq end (point)))
>    (ess-eval-region begin end 4)
>    )
> 
> (defun r/copy-left-of-assign-r-fun-end ()
>    "kill-ring-save expression  left of <- and yank it at point"
>    (interactive)
>    (save-excursion
>      (re-search-backward "<- " (r/get-begin-of-line-point))
>      (setq begin (point))
>      (kill-ring-save begin (r/get-begin-of-line-point))
>      )
>    (yank)
>      )
> 
> I would advise using data.table though, which is less verbose and
> quicker most of the time
> 
> library(data.table)
> setDT(data)
> data[columnB > 123, columnA:= gsub("xxx", "yyy", _POINT_, fixed=TRUE)]
> 
> Hope this helps,
> 
> Jeremie
> 
> 
> 
> 
> Sven Hartenstein via ESS-help <ess-help using r-project.org> writes:
> 
>> Dear ESS users and developers,
>>
>> when writing R code to manipulate an object or data frame column, I
>> often find myself retyping the expression on the left side of "<-" as
>> some argument for a function call or assignment on the right side of
>> "<-".
>>
>> Here are two examples. Imagine your point is at _POINT_ and you want to
>> insert 'data[,"columnA"]' in the first example and in the second example
>> 'data[ data[,"columnB"] < 123 ,"columnA"]' at point.
>>
>> data[,"columnA"] <- tolower(_POINT_)
>>
>> data[ data[,"columnB"] > 123 ,"columnA"] <- gsub("xxx",
>>                                                   "yyy",
>>                                                   _POINT_,
>>                                                   fixed=TRUE)
>>
>> Wouldn't it be handy to have a lisp function which copies the expression
>> on the left side of "<-" and inserts it at point?
>>
>> Or is something like this already available in ESS?
>>
>> Or is my coding process unusual and you are not in the situation to use
>> such a function?
>>
>> What do you think?
>>
>> (I am not very familiar with lisp and thus do not try to write such a
>> function. I might use a macro.)
>>
>> Thanks,
>>
>> Sven
>>
>> ______________________________________________
>> ESS-help using r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/ess-help
>



More information about the ESS-help mailing list