Новичок в Shiny, я пытаюсь создать очень простое приложение с учетом следующей последовательности событий:
(1) Загрузить фрейм данных,
(2) Дождаться, пока пользователь установит параметр фильтрации (Category
в приведенном ниже примере),
(3) Нажмите кнопку Go!
,
(4) Отобразите первые строки фрейма подмножества данных.
Допустим, у меня есть файл df.tab
для загрузки и обработки.
df <- data.frame(Category=c("A","A","A","B","B","B"), X=c(1,2,3,1,2,3), Y=c(1,2,3,34,21,1))
df
Category X Y
1 A 1 1
2 A 2 2
3 A 3 3
4 B 1 34
5 B 2 21
6 B 3 1
write.table(df, file="df.tab", row.names=F, quote=F, sep="\t")
Мой app.R
выглядит так:
library(shiny)
# Define UI ----
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
fileInput("input_df",label=h4("Dataset")),
selectInput("category",h4("Category"), choices = list("A" = 1,"B" = 2),selected = 1),
actionButton("goButton",label = "Go!")
),
mainPanel(
tableOutput("view")
)
)
)
# Define server logic ----
server <- function(input, output) {
data <- eventReactive(
input$input_df,
{
File <- input$input_df
if(is.null(File)){
return(NULL)
}else{
df <- read.table(File$datapath, header = T, sep = "\t")
}
}
)
data_sub <- eventReactive(
input$category,
{
df_sub <- subset(data(), Category == input$category)
}
)
output$view <- renderTable(
{
head(data_sub())
}
)
}
# Run the app ----
shinyApp(ui = ui, server = server)
Однако приложение либо не реагирует или не отображает строки.
Обратите внимание, что я создал 2 различных реактивных события data
и data_sub
, чтобы избежать загрузки файла каждый раз, когда я выбираю другую категорию (и, возможно, чтобы избежать ошибок стека) с рекурсивной функцией).
Любая помощь будет принята с благодарностью.