在 Shiny 的结果选项卡中显示结果
Showing the results in the result tab of Shiny
如何在 Shiny 的 mainPanel 的结果选项卡上输出函数的结果(比如 caret 包中的 confusionMatrix)?
这是我在 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
所以我想在闪亮的格式良好的矩阵中显示混淆 table,我希望能够使用不显示任何内容的 outputTable 来做到这一点,并将纯文本显示为在结果选项卡中。当前主面板中没有显示任何内容。有什么解决办法吗?
capture.output
,来自基础包,再加上 PerformanceAnalytics
包中的 textplot
,您可能会对这种情况感兴趣。
capture.output
允许您以文本格式分别从 confusionMatrix
的输出中提取每个元素。请注意,您可以根据需要重新安排 capture.output
的输出,但在这个特定示例中,我不会修改输出。然后你必须将 capture.output
的输出传递给 textplot
以便能够在 Shiny 中将输出渲染为绘图。
在您上面提供的示例中,我将使用 renderPlot
代替 renderPrint
并利用上述两个函数,如下所示:
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)
我使用了verbatimTextOutput("confusionmatrix")
,它在主面板中显示了结果。
如何在 Shiny 的 mainPanel 的结果选项卡上输出函数的结果(比如 caret 包中的 confusionMatrix)?
这是我在 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
所以我想在闪亮的格式良好的矩阵中显示混淆 table,我希望能够使用不显示任何内容的 outputTable 来做到这一点,并将纯文本显示为在结果选项卡中。当前主面板中没有显示任何内容。有什么解决办法吗?
capture.output
,来自基础包,再加上 PerformanceAnalytics
包中的 textplot
,您可能会对这种情况感兴趣。
capture.output
允许您以文本格式分别从 confusionMatrix
的输出中提取每个元素。请注意,您可以根据需要重新安排 capture.output
的输出,但在这个特定示例中,我不会修改输出。然后你必须将 capture.output
的输出传递给 textplot
以便能够在 Shiny 中将输出渲染为绘图。
在您上面提供的示例中,我将使用 renderPlot
代替 renderPrint
并利用上述两个函数,如下所示:
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)
我使用了verbatimTextOutput("confusionmatrix")
,它在主面板中显示了结果。