R中是否有方法提示用户(即scanf)获取信息,并允许使用字符串数组作为可能的完成情况自动完成该提示?
基本上,寻找类似GNU Readline for R的东西(理想情况下是一个例子)。
答案 0 :(得分:5)
函数名称等的自动完成似乎是运行R的开发环境的一个属性。所以与eclipse相比,它与Rclipse相比在R GUI中的工作方式略有不同,与之相比,与RStudio相比。
从那以后,我认为您可能很难以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
)。挖掘它的源代码可能很有用,但我仍然认为在检索用户输入时,以一种可在开发环境之间移植的方式使其工作变得困难。 (但我很高兴被证明是错的。)