2

Shiny の mainPanel の結果タブにある関数 (caret パッケージの混乱マトリックスなど) の結果を出力するにはどうすればよいですか?

これが私が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               

したがって、光沢のある適切にフォーマットされたマトリックスで混同テーブルを表示したいと思います。何も表示せず、結果タブにもプレーンテキストを表示する outputTable を使用して表示できるようにしたいと考えていました。現在、mainPanel には何も表示されていません。解決策はありますか?

4

2 に答える 2

2

capture.output、基本パッケージtextplotから、PerformanceAnalyticsパッケージからと組み合わせて、この場合に興味があるかもしれません。

capture.outputの出力からすべての要素をconfusionMatrix個別にテキスト形式で抽出できます。必要に応じて出力を再配置capture.outputできますが、この特定の例では出力を変更しないことに注意してください。次に、Shiny で出力をプロットとしてレンダリングできるように 、出力をcapture.outputtoに渡す必要があります。textplot

上記の例では、代わりに、上記の 2 つの関数を次のように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は、渡されるデータフレームのレイアウトを変更するために時間を費やす必要があります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)
于 2015-03-04T05:23:36.770 に答える
1

私が使用verbatimTextOutput("confusionmatrix")したところ、mainPanelに結果が表示されました。

于 2015-03-04T05:47:30.613 に答える