【问题标题】:How to display output text inside of input text box in Shiny?如何在 Shiny 的输入文本框中显示输出文本?
【发布时间】:2019-02-07 13:16:20
【问题描述】:

我正在创建一个闪亮的应用程序,用户可以单击“renderDT”表的一个单元格来选择文本,然后这个选择的文本将被添加到文本输入框中——这个功能类似于你在手机上输入文字,然后手机会给出几个候选词供您选择。然后您可以点击其中一个单词,该单词将自动转到您的文本框,以完成您的输入。

我能够找到有关如何将单击的单元格的值从here 获取到输出的示例。 'server.R' 上的类似内容

shinyServer(function(input, output,session) {
  output$inputecho <- reactive({
    input$inputtext
  })

  candidates <- reactive({

    candidates <- data.table(
                 candidate=c("word1","word2","word3") 
                 score=c(0.2,0.13,0.12) 
                  ) ### here candidates is a dummy data with same ###structure of real data.

    candidates<-as.data.frame(candidates)
    candidates

  })

output$candidates<-renderDT({candidates()},server=FALSE, selection = list(mode='single',target="cell"))

observeEvent(input$candidates_cell_clicked,{
  info=input$candidates_cell_clicked
  if (is.null(info$value)||info$col!=0)return()
  updateTextInput(session,'inputtext',value=paste0(inputtext,info$value))
})

 }
)

这对于'ui.R'

shinyUI(fluidPage(

    mainPanel(

      textInput("inputtext", label="", value=" "),
      p("Click to select from the top candidate words:"),
      DT::dataTableOutput("candidates")
      )
  ))

当我运行应用程序时,似乎可以将单元格显示为选中状态。但是,我的输入文本框内的输入文本没有更新。

【问题讨论】:

    标签: r shiny dt


    【解决方案1】:

    试试这个。 if 条件编码错误,因此从未调用 updateTextinput。此外,inputtext 需要被称为input$inputtext,如果你想paste0 并单击单元格值。我将 cmets 留在了我进行编辑的地方。另外,我用的是data.frame 而不是data.table,没关系。

    library(shiny)
    library(DT)
    library(shiny)
    
    ui <- fluidPage(
      mainPanel(
        textInput("inputtext", label="", value=" "),
        p("Click to select from the top candidate words:"),
        DT::dataTableOutput("candidates")
      )
    )
    
    server <- function(input, output, session) {
      output$inputecho <- reactive({
        input$inputtext
      })
    
      candidates <- reactive({
    
        candidates <- data.frame( # changed from data.table
          candidate=c("word1","word2","word3") , # comma was missing
          score=c(0.2,0.13,0.12) 
        ) ### here candidates is a dummy data with same ###structure of real data.
    
        candidates<-as.data.frame(candidates)
        candidates
    
      })
    
      output$candidates<-renderDT({candidates()},server=FALSE, selection = list(mode='single',target="cell"))
    
      observeEvent(input$candidates_cell_clicked,{
        info=input$candidates_cell_clicked
        print(info$value)
        if (!(is.null(info$value)||info$col==0))# this was wrongly coded in your example
        {
        updateTextInput(session,'inputtext',value=paste0(input$inputtext,info$value)) # assuming you want to concatenate the two
        # if you want to just update the cell do value=info$value
          }
    
      })
    
    }
    
    
    shinyApp(ui, server)
    

    【讨论】:

    • 谢谢!您对条件代码和“输入文本”的调用是正确的。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2012-02-22
    • 2012-08-21
    • 2016-03-24
    • 2014-12-06
    • 2021-12-06
    • 2020-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多