2017-06-15 2 views
0

Ich erstelle eine Shiny-App, die entweder 1) standardmäßig in einem Textfeld bereitgestellten Inhalt verwendet, um eine Abfrage zu erstellen, die von der App ausgeführt wird, oder 2) dem Benutzer eine Abfrage aus einem Text aus einer Datei hochladen kann. und dann den hochgeladenen Inhalt (jetzt in der textArea) als auszuführende Abfrage verwenden. Alle Teile funktionieren, außer dass ich die Textdatei nicht in das Feld textAreaInput laden kann. Ich habe versucht, mit updateTextAreaInput zu arbeiten. Wenige Beispiele existieren und ich war erfolglos.RShiny: Wie aktualisiert man textAreaInput mit dem Inhalt einer Datei über fileInput?

Hier ist ein Beispielcode, der es dem Benutzer ermöglicht, eine Textdatei auszuwählen. Nach der Auswahl wird der Inhalt der Textdatei im Bereich "Debug" der App angezeigt. Wie kann ich diesen Inhalt mit updateTextAreaInput oder anderen Mitteln in das textAreaInput (oder ein anderes bearbeitbares Textfeld wie textArea) bringen? Hinweis: Ich verwende Ausgabe $ Text anstelle der Ausgabe $ Abfrage für Testzwecke ...

Anregungen sehr geschätzt, Arbeitscode Beispiel noch mehr!

library(shiny) 

ui <- fluidPage(
    titlePanel("Load Text File into textAreaInput"), 
    wellPanel(
     column(12, fileInput('fileRQ', 'Load Text File')), 
     fluidRow(
      textAreaInput(inputId="query", "Text Content",rows=12, width='90%', 
     "# Default/example text. To be replaced by content of a file.") 
     ) 
    ), 
    fluidRow(
     tags$hr(), 
     tags$h3("Debug"), 
     verbatimTextOutput("text")  
    ) 
) 

server <- function(input, output) { 
    fileText <- eventReactive(input$fileRQ, { 
     filePath <- input$fileRQ$datapath 
     fileText <- paste(readLines(filePath), collapse = "\n") 
     fileText 
    }) 
    output$text <- fileText 
} 
shinyApp(ui = ui, server = server) 

Antwort

1

Sie waren so nah. Aktualisieren Sie einfach den textAreaInput, wenn eine Datei hochgeladen wurde :) Wenn Sie den Text sonst nicht benötigen, können Sie einfach oberveEvent statt eventReactive verwenden.

library(shiny) 

ui <- fluidPage(
    titlePanel("Load Text File into textAreaInput"), 
    wellPanel(
    column(12, fileInput('fileRQ', 'Load Text File')), 
    fluidRow(
     textAreaInput(inputId="query", "Text Content",rows=12, width='90%', 
        "# Default/example text. To be replaced by content of a file.") 
    ) 
), 
    fluidRow(
    tags$hr(), 
    tags$h3("Debug"), 
    verbatimTextOutput("text")  
) 
) 

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

    # fileText() contains the recent file text 
    fileText <- eventReactive(input$fileRQ, { 
    filePath <- input$fileRQ$datapath 
    fileText <- paste(readLines(filePath), collapse = "\n") 

    # update text area with file content 
    updateTextAreaInput(session, "query", value = fileText) 

    # return the text to be displayed in text Outputs 
    return(fileText) 
    }) 

    output$text <- renderPrint({ fileText() })  
} 
shinyApp(ui = ui, server = server) 

enter image description here

+0

Awesome! Das funktioniert wie ein Zauber. Der Text wird als eine Abfragezeichenfolge übergeben, so dass ich das nächste in der (nicht abgespeckten) App testen und von dort aus gehen werde. Vielen Dank. Ich kann jetzt viele verschiedene Sachen dazu bauen. – Tim

Verwandte Themen