R提示自动完成用户

时间:2012-01-25 13:15:55

标签: r gwidgets

R中是否有方法提示用户(即scanf)获取信息,并允许使用字符串数组作为可能的完成情况自动完成该提示?

基本上,寻找类似GNU Readline for R的东西(理想情况下是一个例子)。

1 个答案:

答案 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)。挖掘它的源代码可能很有用,但我仍然认为在检索用户输入时,以一种可在开发环境之间移植的方式使其工作变得困难。 (但我很高兴被证明是错的。)