DatasetSelector <- R6::R6Class(
classname = "DatasetSelector",
inherit = Panel,
public = list(
initialize = function(...){
# Mandatory
super$initialize(...)
# Ports definition starts here
self$definePort({
# Add an output port (optional)
self$addOutputPort(
name = "dataset",
description = "the selected dataset from environment by data()",
sample = head(mtcars))
})
},
ui = function() {
super$ui(
status = "primary",
fluidRow(
column(12,uiOutput(outputId = self$ns("selectDatasetUI"))),
column(12,style = "overflow:auto",
tableOutput(
outputId = self$ns("selectedDataset"))
)
)
)
},
server = function(input, output, session){
# Mandatory
super$server(input,output,session)
output$selectDatasetUI <- renderUI({
allDatasets <- as.data.frame(data()$results)
allDatasets <- as.character(allDatasets$Item)
selectInput(inputId = self$ns("selectData"),
label = "Select dataset",
choices = allDatasets,
selected = allDatasets[1],
selectize = TRUE)
})
output$selectedDataset <- renderTable({
allDatasets <- as.data.frame(data()$results)
dataset <- getData()
if(is(dataset,"data.frame"))
allDatasets[which(allDatasets$Item == input$selectData),]
else
"Not a table!"
})
getData <- reactive({
tryCatch({
dataName <- input$selectData
req(!is.null(dataName))
print(dataName)
dataset <- get(dataName)
}, error = function(e){
NULL
})
})
# Server logic
modOut <- reactive({
dataset <- getData()
req(is(dataset,"data.frame"))
print(dim(dataset))
return(dataset)
})
# Ports assignment starts here
self$assignPort({
self$updateOutputPort(
id = "dataset",
output = modOut)
})
return(modOut)
}
),
private = list(
# any private functions?
)
)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.