Below are my r-shiny codes. the problem seems come from the server part. if I use the dataset name directly, as the line quoted out "#dList <- mtcars_6[mtcars_6$cyl==6,]", then the app works.
But if I want to make it more dynamic, like use input$index to choose to use different datasets, like "dNam <- paste0(...) and dList <- dNam[dNam$cyl==6,], then it won't work.
Could be an obvious fix, but I just start learning R by project-based, had struggled 2 days and couldn't fix it. Really appreciate if anyone could point out what I missed or was wrong.
Regards,
#2 data involved, you can consider the mtcars as a summary data, and the mtcars_6 is the 6th
#listing data with more details. it's like when you see the summary and want to see the expanded
#data listings.
data(mtcars)
mtcars_6 <- mtcars
#here are the UI & Server part for a r-shiny app
ui <- fluidPage(
titlePanel("Example"),
fluidRow(
column(4,
selectInput("index",
"Index",
c("All",
unique(as.character(mtcars$cyl))))
)
),
DT::dataTableOutput("table")
)
server <- function(input, output) {
output$table <- DT::renderDataTable(DT::datatable({
if (input$index != "All") {
# here are the part I failed, if I use dLsit<- mtcars_6 directly, then gives what I want,
# but if use paste0() to involve the input$index to generate a dataset name, then it
# vvv--- failed.---vvv
#dList <- mtcars_6[mtcars_6$cyl==6,]
dNam <- paste0("mtcars_",input$index)
dList <- dNam[dNam$cyl==6,]
}
dList
}
))
}
shinyApp(ui = ui, server = server)
I tried:
dList <- sprintf("mtcars_",input$index),
dList <- get(paste0("mtcars_",input$index),inherits=F),
assign(dList,paste0("mtcars_",input$index))...
Expecting to let the program use the dataset whose name tailed with input$index.
You are storing the name of the dataset inside a string. Hence you can use
get()
for calling it, see the example below. I also inserted anelse
statement such that you don't get an error when starting the app.