Создавайте разные результаты на разных вкладках, используя R Shiny - PullRequest
0 голосов
/ 06 февраля 2019

Я новичок в R блестящий.Я создал одно веб-приложение, написав код ниже.Здесь мне нужно внести некоторые изменения.

  1. Я хочу создать две кнопки (например, «Вывод», «Точность»)
  2. Когда пользователь нажимает кнопку «Вывод», он должен отображать выходные значения print(final1).
  3. Когда пользователь нажимает кнопку Точность, на нем должна отображаться Матрица смешения (см) print(caret::confusionMatrix(cm2)).

Может кто-нибудь, пожалуйста, помогите мне.Ниже приведен код:

runApp(
list(
ui = fluidPage(

  titlePanel("Upload & Results"),



  sidebarLayout(

    sidebarPanel(


      fileInput('file1', 'Choose Excel File',accept = c(".xlsx")

      )
    ),

    mainPanel(

      tableOutput('contents'))

  )
),
server = function(input, output){
  output$contents <- renderTable({

    req(input$file1)

    inFile <- input$file1





    df_test=read_excel(inFile$datapath, 1)
    df1_test =  subset(df_test, select=c("Number"    ,                    
                                         "Category"       ,"Country"   ,                     
                                         "State"  , "Region","PkValue" ,"ASTvalue" ,"DMValue" ,"Geo","Demo"))




    Probabilty_Score = predict(classifier, type = 'response',newdata = df1_test)
    Output = as.factor(ifelse(Probabilty_Score<0.55,0,1))

    cm2 = table(df_test$Result, Output)

    print(caret::confusionMatrix(cm2))

    final=df_test[,c("Number","Result")]
    final1=cbind(final,Output,Probabilty_Score)    

    print(final1)






  })
}
)
)

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Мы можем добавить два buttons (как указано в вопросе) в коде UI следующим образом:

  actionButton("output", "Output"),  # Button to get Output
  actionButton("accuracy", "Accuracy") # Button to get accuracy 

Теперь мы можем наблюдать событие нажатия кнопки следующим образом (без данных IЯ не уверен, работает ли следующий код или нет):

observeEvent(input$output, {
   print(final1)    # Print the outvalues here as button Output is clicked
})

observeEvent(input$accuracy, {
   print(caret::confusionMatrix(cm2))   # Print confusion matrix here as button accuracy is clicked
})

Обновлен код:

  runApp(
  list(
    ui = fluidPage(

      titlePanel("Upload & Results"),
      sidebarLayout(
        sidebarPanel(
          fileInput('file1', 'Choose Excel File',accept = c(".xlsx")),
          actionButton("output", "Output"),  # Button to get Output
          actionButton("accuracy", "Accuracy") # Button to get accuracy 
        ),

        mainPanel(
          fixedRow(
            column(10,DT::dataTableOutput("contents")) 
          )
        )
     )
    ),
    server = function(input, output){
      output$contents <- renderDataTable({


        req(input$file1)
        inFile <- input$file1
        df_test=read_excel(inFile$datapath, 1)
        df1_test =  subset(df_test, select=c("Number"    ,                    
                                             "Category"       ,"Country"   ,                     
                                             "State"  , "Region","PkValue" ,"ASTvalue" ,"DMValue" ,"Geo","Demo"))


        Probabilty_Score = predict(classifier, type = 'response',newdata = df1_test)
        Output = as.factor(ifelse(Probabilty_Score<0.55,0,1))

        cm2 = table(df_test$Result, Output)

        final=df_test[,c("Number","Result")]
        final1=cbind(final,Output,Probabilty_Score)  

        observeEvent(input$output, {
          print(final1)    # Print the outvalues here as button Output is clicked
        })

        observeEvent(input$accuracy, {
          print(caret::confusionMatrix(cm2))   # Print confusion matrix here as button accuracy is clicked
        })

        # In the following line, return data.frame that you would like to see
        return(DT::datatable(iris, options = list(pageLength = 10)))
      })
    }
  )
)
0 голосов
/ 06 февраля 2019

Поскольку вы не предоставили пример данных, я могу лишь дать вам более или менее приблизительное предположение, что (надеюсь) работает как задумано.Я знаю, что вы хотели иметь две кнопки действий, но я считаю, что добавление переключателя ввода из пакета shinyWidgets более понятный вариант.Я добавил комментарии, где я что-то изменил в вашем коде.Пожалуйста, попробуйте это с вашими данными и скажите мне, если это работает.

library(shiny)
library(shinyWidgets) # You'll need this to get the switch widget
runApp(
  list(
    ui = fluidPage(
      titlePanel("Upload & Results"),
      sidebarLayout(
        sidebarPanel(
          fileInput('file1', 'Choose Excel File',accept = c(".xlsx")), # don't forget a "," here

          #XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
          # Add a switch
          switchInput("input_switch",
                      "change",
                      value=T,
                      onLabel="Output",
                      offLabel="Accuracy")
          #XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

        ),

        mainPanel(
          tableOutput('contents'))
      )
    ),
    server = function(input, output){

      output$contents <- renderTable({
        req(input$file1)
        inFile <- input$file1
        df_test=read_excel(inFile$datapath, 1)
        df1_test =  subset(df_test, select=c("Number"    ,                    
                                             "Category"       ,"Country"   ,                     
                                             "State"  , "Region","PkValue" ,"ASTvalue" ,"DMValue" ,"Geo","Demo"))

        Probabilty_Score = predict(classifier, type = 'response',newdata = df1_test)
        Output = as.factor(ifelse(Probabilty_Score<0.55,0,1))
        cm2 = table(df_test$Result, Output)

        final=df_test[,c("Number","Result")]
        final1=cbind(final,Output,Probabilty_Score)    

        #XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
        # Determine output depending on switch
        if(input$input_switch){
          print(caret::confusionMatrix(cm2))
        }else{
          print(final1)
        }
        #XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

      })
    }
  )
)
...