r - 当我从 Shiny 的条件面板中取消选择主复选框输入时,如何自动取消选择复选框输入
问题描述
我正在创建一个应用程序,它有一个checkboxInput
,如果你选择它,你会看到另外 2checkboxInput
个。现在,如果您取消选择 maincheckboxInput
尽管信息发生了变化,checkboxInput
则 conditionalPanel 内的那些继续被选中。
checkboxInput
当我取消选择第一个主要选项时,如何自动取消选择这些选项?
我试图保存一个变量并将另一个变量更改checkboxInput
为 FALSE,但是.. 它不起作用。我不知道我是否应该更新它们......或者是否有特定的方法可以做到这一点。
data1 <- reactive({
df <- data()
selectPlay <- input$play
if(selectPlay== 1){
if(input$change_log2 == TRUE){
df <- log2(df)
}
if(input$run_sqrt == TRUE){
df <- sqrt(df)
}
}else{
input$change_log2 == FALSE
input$run_sqrt == FALSE
}
return(df)
})
这是整个代码:
library(shiny)
# Define UI
ui <- fluidPage(
# Application title
titlePanel("My app"),
sidebarLayout(
sidebarPanel(
uiOutput("selected_sample_one"),
uiOutput("selected_sample_two"),
checkboxInput("play", strong("I want to play my data"), value = FALSE),
conditionalPanel(
condition = "input.play == 1",
checkboxInput("change_log2", "Log2 transformation", value = FALSE),
checkboxInput("run_sqrt", "sqrt option", value = FALSE))
),
# Show a plot of the generated distribution
mainPanel(
plotOutput("plot")
)
)
)
# Define server
server <- function(input, output,session) {
data <- reactive({
numbers <- c(5,345,55,10)
df<-data.frame(t(numbers))
names(df) <- c("S1", "S2", "S3", "S4")
return(df)
})
data1 <- reactive({
df <- data()
if(input$change_log2 == TRUE){
df <- log2(df)
}
if(input$run_sqrt == TRUE){
df <- sqrt(df)
}
return(df)
})
samples_names <- reactive({
req(data())
samples <- colnames(data())
return(samples)
})
output$selected_sample_one <- renderUI({
selectizeInput(inputId = "sample_one_axis", "Select the 1st sample", choices=samples_names(), options=list(maxOptions = length(samples_names())))
})
# With this function you can select which sample do you want to plot in the y-axis.
output$selected_sample_two <- renderUI({
selectizeInput(inputId = "sample_two_axis", "Select the 2nd sample", choices=samples_names(), selected=samples_names()[2], options=list(maxOptions = length(samples_names())))
})
output$plot <- renderPlot({
req(input$sample_one_axis,input$sample_two_axis,data1())
barplot(c(data1()[,input$sample_one_axis], data1()[,input$sample_two_axis]))
})
}
# Run the application
shinyApp(ui = ui, server = server)
首先十分感谢
问候
解决方案
我对您的代码进行了一些更改,最重要的是使用observeEvent
与updateCheckboxInput
. 除此之外,我把你data()
变成了一个 normal data.frame
,因为它不包含任何反应元素。
library(shiny)
# Define UI
ui <- fluidPage(
# Application title
titlePanel("My app"),
sidebarLayout(
sidebarPanel(
uiOutput("selected_sample_one"),
uiOutput("selected_sample_two"),
checkboxInput("play", strong("I want to play my data"), value = FALSE),
conditionalPanel(
condition = "input.play == 1",
checkboxInput("change_log2", "Log2 transformation", value = FALSE),
checkboxInput("run_sqrt", "sqrt option", value = FALSE)),
),
# Show a plot of the generated distribution
mainPanel(
plotOutput("plot")
)
)
)
# Define server
server <- function(input, output,session) {
numbers <- c(5,345,55,10)
mydat <- data.frame(t(numbers))
names(mydat) <- c("S1", "S2", "S3", "S4")
data1 <- reactive({
dat <- mydat
if(input$change_log2){
dat <- log2(dat)
}
if(input$run_sqrt){
dat <- sqrt(dat)
}
dat
})
observeEvent(input$play, {
if(!input$play) {
updateCheckboxInput(session, "change_log2", value = FALSE)
updateCheckboxInput(session, "run_sqrt", value = FALSE)
}
})
samples_names <- reactive({
samples <- colnames(mydat)
return(samples)
})
output$selected_sample_one <- renderUI({
selectizeInput(inputId = "sample_one_axis", "Select the 1st sample", choices=samples_names(), options=list(maxOptions = length(samples_names())))
})
# With this function you can select which sample do you want to plot in the y-axis.
output$selected_sample_two <- renderUI({
selectizeInput(inputId = "sample_two_axis", "Select the 2nd sample", choices=samples_names(), selected=samples_names()[2], options=list(maxOptions = length(samples_names())))
})
output$plot <- renderPlot({
req(input$sample_one_axis,input$sample_two_axis,data1())
barplot(c(data1()[,input$sample_one_axis], data1()[,input$sample_two_axis]))
})
}
# Run the application
shinyApp(ui = ui, server = server)
推荐阅读
- c++ - 提取括号外数字的代码不起作用
- reactjs - 需要在反应原生导航V5上的所有屏幕中显示标题
- reactjs - 将函数和其他属性传递给 React 功能组件
- javascript - 会话值未正确存储
- macos - 运行 ubuntu 的 mac 可以使用 GPU 吗?
- flutter - Flutter data["dataKey"] 如何返回一个特定的参数?
- windows - Visual Studio - 在 Windows 下编译远程 Linux 文件夹
- c - libevent中基于套接字的bufferevent不需要bufferevent_flush吗?
- arrays - MATLAB:遍历多个双精度数组以找到最小值/最大值
- css - 反应:Flex方向行未生效