2016-06-04 8 views
-1

Dies betrifft Shiny und ist eher konzeptionell, daher gibt es kein reproduzierbares Beispiel, da ich nicht einmal weiß, wo ich anfangen soll.R: Verwenden Sie Daten von CSV als Argumente in einem Shiny Ui Funktionen

Frage: Ist es möglich, die Werte in den Spalten einiger CSV-Datei als Argumente für einige ui-Funktion wie z. numericInput()? Wenn ja, wie würde ich das tun?

Conceptual Beispiel: Angenommen, ich eine CSV-Datei foo mit einer Spalte namens x benannt haben, die 5 eine Zeile mit dem Wert hat. Ist es möglich, diese CSV-Datei als Argument für eine Funktion wie numericInput() zu verwenden. Es sollte wahrscheinlich so etwas sein:

# read the data (not sure where to do that. In the server file? as a reactive? 

mydata <- read.csv("foo.csv") 

# Use data as argument 

numericInput("some id", label = NULL, value = mydata$x) 

Hilfe wird sehr geschätzt.

Antwort

1

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) 

plot

Verwandte Themen