2015-03-04 6 views
2

Как я могу выводить результаты функции (например, confusionMatrix из пакета caret) на вкладке результатов mainPanel в Shiny?Отображение результатов на вкладке результатов Shiny

Вот что я имею в server.R:

#Create Confusion Matrix of Predictions 
    ref = matrix(c("P", "N", "P", "P", "P", "P","N"), ncol=1) 
    pred = matrix(c("P", "N", "N", "P", "P", "P","P"), ncol=1) 
    output$confusionMat <- renderPrint({ 
    confusionMatrix(ref,pred) 
    }) 

И вот что я имею в ui.R:

mainPanel(width = 4, 
     tabsetPanel(
     #tabPanel("Plot", plotOutput("plot")), 
     tabPanel("Result", selectInput("featureEx", "Feature Exploration", 
             c("ABC", "AB", "AC", "A"), multiple = TRUE), 
          helpText("Prediction Results Using Testing data"), 
          dataTableOutput("confusionMat"), 
          capture.output("confusionMat"), 
          plotOutput("fePlot") 
         ), 

Когда я вхожу функцию в RStudio вот результат я получаю:

> confusionMatrix(ref,pred) 
Confusion Matrix and Statistics 

      Reference 
Prediction N P 
     N 1 1 
     P 1 4 

       Accuracy : 0.7143   
       95% CI : (0.2904, 0.9633) 
    No Information Rate : 0.7143   
    P-Value [Acc > NIR] : 0.6792   

        Kappa : 0.3    
Mcnemar's Test P-Value : 1.0000   

      Sensitivity : 0.5000   
      Specificity : 0.8000   
     Pos Pred Value : 0.5000   
     Neg Pred Value : 0.8000   
      Prevalence : 0.2857   
     Detection Rate : 0.1429   
    Detection Prevalence : 0.2857   
     Balanced Accuracy : 0.6500   

     'Positive' Class : N    

Так что я хотел бы показать таблицу путаницы в отформатированных матрицах в блестящем, и я надеялся, что абы le, чтобы сделать это, используя outputTable, который ничего не показывает, а также покажет простой текст на вкладке результатов. В настоящее время ничего не отображается в mainPanel. Любое решение?

+1

Могу ли я сделать предложение и попросить вас предоставить [single-file shiny] (http://shiny.rstudio.com/articles/single-file.html), чтобы мы могли легко запускать код и просматривать результаты? Я собираюсь предложить решение, но оно не будет воспроизводимым, потому что вы не предоставили полный код –

ответ

0

Я использовал verbatimTextOutput("confusionmatrix") и показал результаты в mainPanel.

2

capture.output, из базового пакета, в комплекте с textplot пакета PerformanceAnalytics может заинтересовать вас в этом случае.

capture.output позволяет извлекать каждый отдельный элемент с вывода confusionMatrix отдельно в текстовом формате. Обратите внимание, что вы можете перенастроить вывод capture.output, но вы хотите, но в этом конкретном примере я не буду изменять вывод. Затем вам нужно будет передать вывод capture.output на номер textplot, чтобы иметь возможность отображать результаты в виде графика в Shiny.

В примере, который вы указали выше, вместо renderPrint я хотел бы использовать renderPlot и использовать две функции, упомянутые выше, следующим образом:

require(PerformanceAnalytics) 
output$confusionMat <- renderPlot({ #Replaced renderPrint with renderPlot 
    textplot(  #wrap textplot around capture.output 
     capture.output( #capture output of confusionMatrix in text format 
      confusionMatrix(ref,pred) #your original code here 
     )  #close capture.output 
    ) #close textplot 

}) #close renderPlot 

Но если вы действительно хотите использовать renderDataTable вам нужно убедитесь, что вы передаете информационный кадр на renderDataTable.

Ниже приведено полностью воспроизводимое приложение с другим набором данных. Если вы запустите код ниже, результаты будут выглядеть уродливыми, и это потому, что я не нашел времени, чтобы перестроить вывод capture.output по своему вкусу. Если вы хотите использовать renderDataTable вам нужно будет потратить некоторое время, чтобы изменить расположение на dataframe передается в renderDataTable:

require(shiny) 
require(caret) 
require(PerformanceAnalytics) 

server <- function(input,output,session){ 
    output$confusionMat <- renderDataTable({ 
     data.frame(
      capture.output(
       confusionMatrix(iris$Species, sample(iris$Species)) 
      ) 
     ) 

    }) 

} 

ui <- shinyUI(fluidPage(

    sidebarLayout(
     sidebarPanel(

     ), 

     mainPanel(
      dataTableOutput('confusionMat') 
     )  

    ) 
)) 

shinyApp(ui = ui, server = server) 
Смежные вопросы