R で、ユーザー (すなわち scanf) に情報を求めるプロンプトを表示し、可能な補完として文字列の配列を使用してそのプロンプトの自動補完を許可する方法はありますか?
基本的に、R 用の GNU Readline のようなものを探します (理想的には例を示します)。
関数名などのオートコンプリートは、R を実行している開発環境のプロパティのようです。そのため、R Studio と比較して emacs と比較して、Eclipse と比較して R GUI ではわずかに異なる動作をします。
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[]
、アイテムのセットです。
utils
R GUI (およびおそらく他のもの) のオートコンプリートは、パッケージ内の一連の関数に基づいて構築されています (「参考文献」を参照?rcompgen
)。そのソースを掘り下げることは役立つかもしれませんが、開発環境間で移植可能な方法で、ユーザー入力を取得している間にそれを機能させるのは難しいと思います. (間違っていることが証明されれば幸いです。)