2012-01-25 3 views
3

사용자에게 (즉, scanf) 정보를 요청하고 가능한 문자열로 문자열 배열을 사용하여 해당 프롬프트의 자동 완성을 허용하는 방법이 있습니까?R 자동 완성 기능을 사용하는 프롬프트 사용자

기본적으로 R 용 GNU Readline (예를 들어 이상적으로)과 같은 것을 찾고 있습니다.

+0

이와 같은 것이 없다면 다른 목록에있는 것들을 쉽게 선택할 수있는 다른 방법에도 관심이 있습니다. "# index : "문자열"목록과 사용자가 숫자를 선택하게하는 것은 가장 ... "BASIC' ;-) –

+0

아, 방금 설명한 내용을 수행하는'utils'의 일부로'select.list'를 찾았습니다. –

+0

카일, 다른 사람들이이 도구를 찾고있는 경우에 대비하여 솔루션을 답으로 게시하십시오. –

답변

4

함수 이름에 대한 자동 완성은 R을 실행하는 개발 환경의 속성 인 것으로 보입니다. R GUI에서 Eclipse와 약간 다른 방식으로 작동합니다.

그렇기 때문에 상당한 해커가없는 scanf/readline에 대한 자동 완성 작업을 수행하는 데 어려움을 겪을 수 있습니다.

더 나은 해결책은 동작을 제어하는 ​​고유 한 GUI를 만드는 것입니다. 다음은 gWidgets을 사용하는 예제입니다. 드롭 다운 목록 (일명 콤보 박스)은 입력 내용에 따라 선택이 줄어 듭니다. 그 처리기 내부

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가 빌릴 수 있습니까? –

관련 문제