使用Observe或其他反应函数以Shiny输出单个数据帧单元

时间:2018-10-22 19:53:32

标签: r dataframe shiny

在使用Shiny构建我的第一个非常基本的Web应用程序时,我处于最后也是最关键的一步,而我在努力完成我认为应该是非常基本的任务。该应用的想法是让应用观察两个输入,然后基于两个输入从数据框中输出单个值。

示例代码使其非常清楚。

Server
    DF X Y Z
    1  A B C
    2  C D E
    3  F G H

UI
    InputA: Row - 2
    InputB: Column - Z

    Output: E

此刻,我遇到了麻烦,因为我没有收到错误。该应用程序启动时没有问题,并且此选项卡上的所有其他小部件以及其他小部件都在工作。目前,文本框什么也没做。一个人可以在前两个中键入值,但随后不输出任何内容,也不提供错误消息。之所以令人沮丧,是因为尽管我缺少一些非常明显的东西。

这是实际的代码 服务器

server <- function(input, output, session) {
#Download Data and create data table.
  rlwin <- read.csv("rlwinClean.csv")
...
observe({
    Lead <- as.character(input$Lead)
    CalcTime <- as.character(input$CalcTime)
    addtext <- paste(rlwin[rlwin$Time == CalcTime, Lead])
    updateTextInput(session,"winProbability", value=addtext)
    })
 }
...

用户界面:

ui <- (navbarPage(theme=shinytheme("sandstone"), title=h3("Rocket League Win Probability"),
              #Tab1 ----
              tabPanel("Win Probability Model",
                       #The Plot
                       plotOutput("modPlot", height="800px"),
                       #Probabililty Calculator
                       h4("Win Probability Calculator"),
                       textInput(inputId="CalcTime", label="Enter Time on Clock Remaining in Game", placeholder="0:00 to 5:00"),
                       textInput(inputId="Lead", label="Enter Lead or Deficit", placeholder="-4 to 4"),
                       br(""),
                       textInput(inputId="winProbability",label="Win Probability",placeholder="50%"),
                       br("")
                       ),

...

编辑:找到了答案。可能有点长了

服务器

...
observeEvent(input$runCalc,{
  time <- subset(react, GameClock == input$CalcTime)
  all <- subset(time, select = input$Lead)
  val <- paste(all)

updateTextInput(session, inputId = "probText", value = val)
})
....

用户界面实际上保持不变

2 个答案:

答案 0 :(得分:0)

尝试分配观察者

my_observer <- observe({ .... })

答案 1 :(得分:0)

以下代码对我有用。请注意,我已对您的某些输入进行了重命名,因为很难跟踪应该在何处使用您的输入。

发生错误是因为原始代码中的addText为空(逻辑条件未返回任何记录)。您将在下面看到我如何将输出打印到控制台以对其进行调试。

library(shiny)

ui <- (navbarPage( title=h3("Rocket League Win Probability"),
                  #Tab1 ----
                  tabPanel("Win Probability Model",
                           textInput(inputId="column_name", label="Column name", placeholder="X, Y or Z"),
                           textInput(inputId="row_number", label="Row number", placeholder="1, 2 or 3"),
                           br(""),
                           textInput(inputId="winProbability",label="Win Probability",placeholder="50%"),
                           br("")
                  )
))

server <- function(input, output, session) {
  #Download Data and create data table.
  rlwin = data.frame(DF = c(1,2,3), X = c("A","B","C"), Y = c("B","D","G"), Z = c("C","E","H"))

  observe({
    col_name <- as.character(input$column_name)
    row_num <- input$row_number
    addtext <- paste(rlwin[row_num, names(rlwin) == col_name])
    # print("debug print out")
    # print(col_name)
    # print(row_num)
    # print(addtext)
    updateTextInput(session,"winProbability", value=addtext)
  })
}

shinyApp(ui, server)