r-基于多个用户输入的闪亮分配数据帧



我正试图根据Shiny应用程序中的一些用户输入来分配数据帧和列表(稍后用于代码中的计算(。其中一个任务依赖于两个用户输入——我该如何做到这一点?我试着附上一些可复制的代码。。。

library(shiny)
set.seed(4)
#  lists and dataframes to be assigned based on user inputs
A <- list(rnorm(6), rnorm(6))
B <- list(rnorm(6), rnorm(6))
dfA <- as.data.frame(cbind(rnorm(6), rnorm(6)))
dfA_adj <- as.data.frame(cbind(rnorm(6), rnorm(6)))
dfB <- as.data.frame(cbind(rnorm(6), rnorm(6)))
dfB_adj <- as.data.frame(cbind(rnorm(6), rnorm(6)))

ui <- fluidPage(

titlePanel(strong("Title")),

sidebarLayout(

sidebarPanel(

#content
h4(strong("Select data sets to use in calculations:")),
selectInput('L', 'Select list to use', c("List A" = 'a', "List B" = 'b')),
selectInput('P','Select Calculation method', c("Adjusted" = 'Adj', "Standard" = 'St'))

),

mainPanel(
tableOutput("table")
)
)
)

server <- function(input, output) {

#assign dataframes and list to use in code calcs (not shown) based on user inputs

pts <- reactive({ switch(input$L, "a" = A, "b" = B)  })
PET <- reactive({  switch(c(input$L, input$P),
c("a", "Adj") = dfA_adj,
c("a", "St") = dfA,
c("b", "Adj") = dfB_adj,
c("b", "St") = dfB   })


output$table <- renderTable(PET())
}

shinyApp(ui = ui, server = server)  

我们可以使用if语句:

library(shiny)
set.seed(4)
#  lists and dataframes to be assigned based on user inputs
A <- list(rnorm(6), rnorm(6))
B <- list(rnorm(6), rnorm(6))
dfA <- as.data.frame(cbind(rnorm(6), rnorm(6)))
dfA_adj <- as.data.frame(cbind(rnorm(6), rnorm(6)))
dfB <- as.data.frame(cbind(rnorm(6), rnorm(6)))
dfB_adj <- as.data.frame(cbind(rnorm(6), rnorm(6)))

ui <- fluidPage(

titlePanel(strong("Title")),

sidebarLayout(

sidebarPanel(

#content
h4(strong("Select data sets to use in calculations:")),
selectInput('L', 'Select list to use', choices =  c("List A" = 'A', "List B" = 'B')),
selectInput('P','Select Calculation method', choices =  c("Adjusted", "Standard"))

),

mainPanel(
tableOutput("table")
)
)
)

server <- function(input, output, session) {


PET <- reactive({ 

if (input$L == "A" && input$P == "Adjusted") {
dfA_adj}
else if (input$L == "A" && input$P == "Standard") {
dfA 
} else if (input$L == "B" && input$P == "Adjusted") {
dfB_adj 
} else {
dfB
}

})

output$table <- renderTable({PET()})

}

shinyApp(ui = ui, server = server)  

最新更新