Я хотел бы использовать приложение Shiny для загрузки файла (разделенного табуляцией), динамически создать checkboxGroupInput
, после загрузки файла (используя observeEvent
) с использованием заголовков столбцов, а затем установить подкадр данныхэто происходит из файла на основе выбранных флажков. Затем данные выводятся с использованием кода, которым я сейчас не могу поделиться.
Все работает отлично, кроме последнего бита: подстановка кадра данных на основе выбранных флажков в 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)
Спасибо всем