【发布时间】:2019-10-31 08:16:35
【问题描述】:
我想使用 Shiny 应用程序加载文件(制表符分隔),在加载文件后(使用 observeEvent)使用列标题动态创建一个checkboxGroupInput,然后对数据框进行子集化来自基于选定复选框的文件。然后使用我现在无法共享的代码绘制数据。
除了最后一点:根据checkboxGroupInput 中选中的复选框对数据框进行子集化,一切都运行良好。复选框都开始被选中,并且绘图创建得很好。如果您取消选择其中一个复选框,则绘图会在瞬间重新绘制(因此子集工作正常)然后未选中的复选框会重新选择自身并且绘图会返回到旧绘图。
这是我试图解决的小问题,猜测是一行代码。我假设这是因为一些我不理解的反应性和复选框不断重置自身。
这是一个例子:
###
## Some functions I can't share
### Shiny app
library(shiny)
# Define UI
ui <- fluidPage(
# Application title
titlePanel("MagicPlotter"),
# Sidebar
sidebarLayout(
sidebarPanel(
fileInput(inputId = "myInputID",
label = "Your .csv file",
placeholder = "File not uploaded"),
uiOutput("mylist"),
uiOutput("submitbutton")
),
# Show a plot
mainPanel(
verticalLayout(
plotOutput("myPlot"))
)
)
)
# Define server
server <- function(input, output) {
output$myPlot <- renderPlot({
inputfile <- input$myInputID
if(is.null(inputfile))
{return()}
mydataframe <- read.table(file=inputfile$datapath, sep="\t", head=T, row.names = 1)
mydataframecolumnnames <- colnames(mydataframe[1:(length(mydataframe)-1)])
# the last column is dropped because it's not relevant as a column name
observeEvent(input$myInputID, {
output$mylist <- renderUI({
checkboxGroupInput(inputId="mylist",
label="List of things to select",
choices=mydataframecolumnnames,
selected=mydataframecolumnnames)
})
})
observeEvent(input$myInputID, {
output$submitbutton <- renderUI({
submitButton("Subset")
})
})
mysubset <- mydataframe[input$mylist]
myPlot(mysubset)
})
}
# Run the application
shinyApp(ui = ui, server = server)
谢谢大家
【问题讨论】: