【问题标题】:R Prompt User With AutocompleteR使用自动完成提示用户
【发布时间】:2012-01-25 13:15:55
【问题描述】:

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

基本上,寻找类似 GNU Readline for R 的东西(最好有一个例子)。

【问题讨论】:

  • 如果没有这样的东西,我也会对用户从长列表中轻松选择内容的其他方式感兴趣——我想打印一个“#index:”string”列表并拥有用户选择的数字将是最多的...... BASIC ;-)
  • 啊,刚刚发现 select.listutils 的一部分,它完成了我在上面评论中描述的操作。
  • Kyle,继续发布您的解决方案作为答案,以防其他人正在寻找此工具。
  • @CarlWitthoft:嗯,它不支持自动完成,所以我不会把它称为我的问题的解决方案。如果一天左右没有发布某些内容,尽管我会将其变成答案。

标签: r gwidgets


【解决方案1】:

函数名称等的自动完成似乎是运行 R 的开发环境的一个属性。因此,与 eclipse 相比,emacs 与 RStudio 相比,它在 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[] 是项目集。


R GUI(可能还有其他)中的自动完成功能基于utils 包中的一组函数(请参阅?rcompgen)。挖掘其来源可能很有用,但我仍然认为在检索用户输入时很难让它工作,以一种在开发环境之间可移植的方式。 (不过我很高兴被证明是错误的。)

【讨论】:

  • RStudio 实现了自动补全,并且是开源的。也许OP可以从中借用?
  • 这些 gWidgets 包现在都不能在 CRAN 上使用
  • 是的,gWidgets 现在已经过时了 - 使用 Shiny 来满足任何仪表板需求。
【解决方案2】:

你可以用 rstudioapi 来做这件事

choices = list(test=\(){cat("test")})
rstudioapi::sendToConsole("choices$",execute = F)

现在按下选项卡具有运行相关功能的自动完成选项。

【讨论】:

    猜你喜欢
    • 2015-11-11
    • 2021-06-28
    • 1970-01-01
    • 2014-11-12
    • 2013-10-31
    • 2016-06-09
    • 2015-09-25
    • 2019-03-16
    • 1970-01-01
    相关资源
    最近更新 更多