2012-01-25 4 views
3

Есть ли способ в R запросить пользователя (то есть scanf) для информации, а также разрешить автозаполнение этого запроса с использованием массива строк как возможно доработок?R Запрос пользователя с автозаполнением

В принципе, вы ищете что-то вроде GNU Readline для R (в идеале с примером).

+0

Если ничего подобного не было, меня также интересовали бы другие способы, которыми пользователь легко выбирает вещи из длинного списка - я предполагаю, что напечатаю «# index : «Строковый» список и выбор пользователем номера будет самым ... 'BASIC' ;-) –

+0

А, просто нашел' select.list' как часть 'utils', который делает то, что я только что описал в своем выше комментариев. –

+0

Кайл, отправляй свое решение в качестве ответа, в случае, если другие ищут этот инструмент. –

ответ

4

Автозаполнение имен функций и т. Д., По-видимому, является свойством среды разработки, которая работает 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). Копание в источнике этого может быть полезно, но я все же думаю, что будет трудно заставить его работать, пока вы извлекаете пользовательский ввод, таким образом, который переносится между средами разработки. (Я был бы счастлив, если бы был ошибочен.)

+1

RStudio реализует автозаполнение и является открытым исходным кодом. Может быть, OP может заимствовать у него? –