Возможны ли пользовательские функции автозаполнения в R? - PullRequest
0 голосов
/ 10 апреля 2019

Я ищу создание пользовательской функции в R, которая позволит пользователю вызывать функцию, а затем она создаст автоматически завершенный конвейер, готовый для редактирования, таким образом они могут быстро перейти к пользовательской настройке стандартного конвейера вместоскопировать вставку из старого сценария или перепечатывание.Как я могу настроить автозаполнение такого типа:

#pseudo code what I type---
seq.Date(1,2,by = "days") %>%
  pblapply(function(x){
    read.fst(list.files(as.character(x), as.data.table = T) %>%
               group_by(x) %>%
               count()
  }) %>% rbindlist()

#how can I write a function so that when I call that function, it ouputs an autocomplete
#of the above so that I can go ahead and start just customizing the code? Something like this
my_autocomplete_function = function(x) {
  print(
    "
    seq.Date(as.Date(Sys.Date()),as.Date(Sys.Date()+1),by = 'days') %>%
      pbapply::pblapply(function(x){
        fst::read.fst(list.files(as.character(x), as.data.table = T)) %>%
          #begin filtering and grouping by below custom
          group_by()


      }) %>% rbindlist()  
")
}

#I can just print the function and copy paste the text from the output in my console to my script
my_autocomplete_function()
#but I rather it just autocomplete and appear in the script if possible?

1 Ответ

0 голосов
/ 10 апреля 2019

Помещение текста в командную строку, вероятно, будет функцией интерфейса, который вы используете для запуска R - это просто R, Rstudio и т. Д.?

Одной из возможностей может быть использование пакета clipr и помещение кода в буфер обмена, а затем предложение пользователю нажать кнопку «вставить», чтобы получить его в командной строке. Например, эта функция, которая создает небольшую строку кода:

> writecode = function(x){
    code = paste0("print(",x,")")
    clipr::write_clip(code)
    message("Code ready to paste")}

Используйте это так:

> writecode("foo")
Code ready to paste

Затем, когда я нажимаю Ctrl-V, чтобы вставить, я вижу это:

> print(foo)

Затем я могу отредактировать эту строку. Подойдет любая строка:

> writecode("bar")
Code ready to paste
[ctrl-V]
> print(bar)

Это еще одна дополнительная клавиша, которую пользователь может нажать, но наличие фрагмента кода, появляющегося в командной строке без запроса, может быть довольно удивительным для пользователя.

...