Автозаполнение имен функций и т. Д., По-видимому, является свойством среды разработки, которая работает R. Таким образом, это немного отличается в R GUI по сравнению с eclipse по сравнению с emacs по сравнению с RStudio по сравнению с чем угодно.
От этого, я думаю, вы можете попытаться получить автозаполнение, работая портативным способом для scanf
/readline
без существенного хакерства.
Лучшим решением было бы создать собственный графический интерфейс, в котором вы контролируете поведение. Вот пример, используя gWidgets
, с раскрывающимся списком (он же combobox), выбор которого уменьшается в зависимости от того, что на нем набирается.
library(gWidgetstcltk) # or gWidgetsRGtk2, etc.
#some choices to complete to
choices <- c("football", "barometer", "bazooka")
#sort to make it easier for the user to find one, and
#prepend with a blank string to type in
items <- c("", sort(choices))
#create a gui
win <- gwindow()
drp <- gdroplist(items = items, editable = TRUE, cont = win)
#When the user types something, update the list of available items
#to those that begin with what has been typed.
addHandlerKeystroke(drp, handler = function(h, ...)
{
regex <- paste("^", svalue(h$obj), sep = "")
h$obj[] <- items[grepl(regex, items)]
})
Внутри этого обработчика, h$obj
относится к выпадающего списка виджета, svalue(h$obj)
является выбранный в данный момент, и значение h$obj[]
есть множество пунктов.
автодополнение в R GUI (и, возможно, другие) строится на множестве функций в utils
пакете (см ?rcompgen
). Копание в источнике этого может быть полезно, но я все же думаю, что будет трудно заставить его работать, пока вы извлекаете пользовательский ввод, таким образом, который переносится между средами разработки. (Я был бы счастлив, если бы был ошибочен.)
Если ничего подобного не было, меня также интересовали бы другие способы, которыми пользователь легко выбирает вещи из длинного списка - я предполагаю, что напечатаю «# index : «Строковый» список и выбор пользователем номера будет самым ... 'BASIC' ;-) –
А, просто нашел' select.list' как часть 'utils', который делает то, что я только что описал в своем выше комментариев. –
Кайл, отправляй свое решение в качестве ответа, в случае, если другие ищут этот инструмент. –