r - 如何使用 Shiny 中的单选按钮以不同方式处理数据?
问题描述
我正在尝试使用 Shiny 创建一个应用程序,并且我想对来自每个单选按钮的数据进行不同的处理,以便为每个单选按钮选项创建不同的图。
我拥有和工作的代码是这个:
library(shiny)
library(ggplot2)
library(tidyverse)
library(dplyr)
library(caret)
library(wakefield)
#Create dummy dataset named datos
X <- r_sample_factor(c("low", "high"), n=232)
MAMAMA<-r_sample_factor(c("C/C", "C/G", "G/G"), n=232)
MEMEME<-r_sample_factor(c("C/C", "C/T", "T/T"), n=232)
MIMIMI<-r_sample_factor(c("A/A", "A/T", "T/T"), n=232)
datos<-data.frame(X,MAMAMA,MEMEME,MIMIMI)
#Data partition
set.seed(12345)
inTrain <- createDataPartition(y=datos$X, p=0.66666666666666667, list=FALSE)
datos_train<-datos[inTrain,]
datos_test<-datos[-inTrain,]
class_train<-datos[inTrain,1]
class_test<-datos[-inTrain,1]
#Define ui
ui <- fluidPage(
titlePanel("This is a title"),
sidebarLayout(
sidebarPanel(
radioButtons("algorithm",
"Select one algorithm to visualize its output",
choices= c("Random Forest" = "rf",
"Artificial Neural Network" = "mlp",
"Support Vector Machine" = "svmRadial") )
),
mainPanel(
tabsetPanel(type="tabs",
tabPanel("Prediction", verbatimTextOutput("confucio")),
tabPanel("Plot", plotOutput("plot")),
tabPanel("Confussion Matrix", verbatimTextOutput("matrix"))
)
#From select variable model
#tableOutput("table"),
#plotOutput("myPlot")
)
)
)
server <- function(input, output, session) {
output$confucio<-renderPrint(train(X~., datos_train,
method=input$algorithm,
trControl= trainControl(method='cv', number=5)))
output$plot <- renderPlot({
plot(train(X~., datos_train, method=input$algorithm, trControl= trainControl(method='cv', number=5)))
})
output$matrix<-renderPrint({ confusionMatrix(
predict(
train(X~., datos_train, method=input$algorithm, trControl= trainControl(method='cv', number=5)), datos_test)
, class_test)
})
}
# Run the application
shinyApp(ui, server)
但是,对于 output$plot 我想为每个单选按钮的可能性做不同的图。我试过这个,但它不起作用。
output$plot <- renderPlot({
if(input$algorithm == "Random Forest"){
model<-train(X~., datos_train, method="rf", trControl= trainControl(method='cv', number=5))
plot(model$finalModel, main="Random Forest")
}
if(input$algorithm == "Artificial Neural Network"){
model<-train(X~., datos_train, method="mlp", trControl= trainControl(method='cv', number=5))
plotnet(model, main="Artificial Neural Network")
}
if(input$algorithm == "Support Vector Machine"){
model<-train(X~., datos_train, method="svmRadial", trControl= trainControl(method='cv', number=5))
plot(model, main="Support Vector Machine")
}
})
解决方案
您需要使用条件中的“原始”名称,而radioButtons
不是if
您为选择提供的新名称:
output$plot <- renderPlot({
if(input$algorithm == "rf"){
model<-train(X~., datos_train, method="rf", trControl= trainControl(method='cv', number=5))
plot(model$finalModel, main="Random Forest")
}
if(input$algorithm == "mlp"){
model<-train(X~., datos_train, method="mlp", trControl= trainControl(method='cv', number=5))
plotnet(model, main="Artificial Neural Network")
}
if(input$algorithm == "svmRadial"){
model<-train(X~., datos_train, method="svmRadial", trControl= trainControl(method='cv', number=5))
plot(model, main="Support Vector Machine")
}
})
推荐阅读
- postgresql - 使用列表替换 regexp_replace 中的奇异模式
- javascript - 在 CORS 请求后未存储 ASPXAUTH cookie
- python - 在不使用 PIP 的情况下分发 Python 应用程序
- python-3.x - 使用 Pandas 编写第二个标题和合并单元格
- wpf - 将文本粘贴到我的 WPF 应用程序后面的应用程序中
- string - 如何在惯用的 Kotlin 中将驼峰字符串转换为蛇形字符串并返回?
- bash - 以root身份运行子shell
- c# - 显示表中的菜单权限列表 - 在实体框架中将 RoleId 和 UserId 替换为 RoleName 和 UserName
- memory - 使用 BIOS int 0x15/E820 查看内存映射
- postman - 在 Postman 中一次删除所有全局变量