Ich denke, die Kombination von fileInput()
(ui-Funktion) und observe({ update__Input() })
(Server-Funktionen, zum Beispiel updateNumericInput()
) Argumente einige ui Funktionen erneuern kann in Abhängigkeit von einem einzelnen Wert einer CSV-Datei gibt. Aber soweit ich weiß, kann mit ein paar Ausnahmen (z. B. s Argument, Auswahlmöglichkeiten) mehr als ein Längenvektor nicht die meisten Argumente sein. Also habe ich selectInput()
verwendet, um alle Werte in einer Spalte als Argument zu verwenden.
Hier ist mein Beispiel app.R. Jedes Mal, wenn Sie eine CSV-Datei eingeben, aktualisieren einige Argumente der ui-Funktionen (selectInput("row.value")
) abhängig von den Werten in der Spalte; numericInput("col")
und sliderInput("row")
's max, sliderInput("range")
' s min, max und Wert in Abhängigkeit von einem einzelnen Wert (zB nrow(data)
, mean(a column)
)). Und jedes Mal, wenn Sie "col", "row.value" und "range" ändern. Ich denke, es gibt viel Raum für Verbesserungen in diesem Code.
app.R
library(shiny)
ui <- shinyUI(fluidPage(
sidebarLayout(
sidebarPanel(
fileInput("file", label="Input File:"),
br(),
numericInput("col", "col :", min = 1, max = 2, value = 1, step = 1),
sliderInput("row", "row :", min = 1, max = 2, value = 1, step = 1),
selectInput("row.value", "row.value :", choices = 1, selectize = F, size = 10),
br(),
sliderInput("range", "range :", min = 1, max = 2, value = 1)
),
mainPanel(
br(),
h5("Result :"),
verbatimTextOutput("result1"),
br(),
h5("Data Table :"),
dataTableOutput("table1")
)
)
))
server <- shinyServer(function(input, output, session) {
observe({
file <- input$file
if(is.null(file)) { } else {
data <- read.csv(file$datapath)
col.data <- as.numeric(data[,input$col])
updateNumericInput(session, "col", "col :", min = 1, max = ncol(data), value = NULL, step = 1)
updateSliderInput(session, "row", "row :", min = 1, max = nrow(data), value = NULL, step = 1)
updateSelectInput(session, "row.value", "row.value :", choices = sort(unique(col.data)))
updateSliderInput(session, "range", "range & mean :", min = min(col.data),
max = max(col.data), value = mean(col.data))
}
})
output$result1 <- renderText({
file <- input$file
if(is.null(file)) { } else {
data <- read.csv(file$datapath)
c(paste0(iconv(file$name), "["), input$row, ",",input$col, "] is", data[input$row, input$col],
"; Index of", paste0(iconv(file$name), "[value =="), input$row.value, ",", input$col, "] is",
which(as.numeric(data[,input$col]) == input$row.value))
}
})
output$table1 <- renderDataTable({
file <- input$file
if(is.null(file)) { } else {
read.csv(file$datapath)
}
})
})
shinyApp(ui = ui, server = server)