在 Shiny 中使用部分 textInput 作为 R 中的变量

Posted

技术标签:

【中文标题】在 Shiny 中使用部分 textInput 作为 R 中的变量【英文标题】:Using partial textInput in Shiny as variable in R 【发布时间】:2019-11-05 11:24:30 【问题描述】:

我想在 Shiny 中使用 textInput 的一部分来创建一个变量,该变量将依次与数据框 (DF) 中的值匹配,并根据该匹配值创建 textOutput。假设我有一个 textInput ,其典型输入为例如ABC 123、ABC 234、ABC 345、BCD 123、BCD 234、BCD 345。我还有一个 DF,其中包含一列 (Col1),其中包含典型 textInput 的“第一”部分,即 ABC、BCD 和另一列带有一组像这样的对应值(Col2)

DF <-
   Col1 Col2
1  ABC    W
2  BCD    Y
3  CDE    X
4  DEF    Z

我想使用 textInput,比如“ABC 123”,只选择它的“第一”部分(“ABC”),然后使用这个字符串在 DF$Col2 中找到其对应的值,并在 Shiny 中创建 textOutput 来填充/输出该值,在本例中为“W”。同样,如果 textInput (input$UserInput) 中的用户输入是 CDE 345,我希望输出值显示为“X”。

我可以创建“第一”部分文本并输出到相关空间,但在使用它在 DF 中查找相应值并将其输出的附加部分遇到问题。

我用它来隔离文本输入的“第一”部分,

  output$first <- renderText(paste(substr(input$UserInput, 1, 
  nchar(input$UserInput)-4)))  

这会输出“ABC”、“CDE”等字符串,但我在使用它进行第二步时遇到问题,即在 DF$Col2 中找到正确的值并改为输出。

【问题讨论】:

【参考方案1】:

您可以将您的 substr 调用包装到反应函数中。

mySelection <- reactive(
    inputString <- paste(substr(input$UserInput, 1, nchar(input$UserInput)-4))
    return(inputString)
)

现在inputString 的值将根据input$UserInput 的值而改变,并且可以在脚本中的任何位置调用(如mySelection())。

output$first <- renderText(mySelection())

然后您可以使用DF[which(DF$col1 == mySelection()),]$col2 提取您想要的值

【讨论】:

太好了,使用 inputString 从 DF 获取相关值的最佳方法是什么,以便 mySelection 中的最终输出是值 10,如果用户输入是 ABC 123。跨度> DF[which(DF$col1 == mySelection()),]$col2 我无法将正确的值输入到 output$first 中,我得到了 input$UserInput 的第一部分(即 ABC),但我想使用该字符串来匹配相应的值在 DF 列 2 中,因此 output$first 实际上输出值 10 。我似乎错过了一些东西或一步。非常感谢任何帮助。 帮助您会容易得多。如果您使用正在使用的 DF 示例编辑原始问题。 谢谢,我把原来的解释改了,加了相关资料。

以上是关于在 Shiny 中使用部分 textInput 作为 R 中的变量的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Shiny 在 readORG 中使用 textInput 作为图层名称

Shiny:在 textInput 中对齐文本

R Shiny:在UI上的textInput中检查正则表达式

r Shiny 使 textInput 以先前的 selectInput 为条件

如何使用 insertUI 在 Shiny 应用程序中将 textInput 转换为输出

如何在 Shiny 应用程序中验证 textInput?