2017-05-25 2 views
1

Also meine glänzende App soll einige Texte als Eingabe nehmen und dann ein Ein-Wort-Text als Ausgabe geben. Aber anscheinend bekomme ich den Fehler - "Argument ist kein Zeichenvektor". Das sind meine Codes:Welchen Typ liefert der textAreaInput von r shiny?

app.R

library(shiny) 


server <- function(input, output) { 
    text1 <- eventReactive(input$actionButton,{ 
    getPrediction(input$caption) 
    }) 
    output$text1 <- renderUI({ 
    text1() 
    }) 
} 

ui <- fluidPage(
    sidebarLayout(
    sidebarPanel(
     textAreaInput(inputId="caption", label="Put your text here", width="100%", height="400px", value="", placeholder = "Placeholder"), 
     actionButton("actionButton", label = "Submit") 
    ), 
    mainPanel(
     h3("Name"), 
     textOutput("text1") 
    ) 
) 
) 

shinyApp(ui = ui, server = server) 

helper.R

library(doMC) 
registerDoMC(cores=detectCores()) 

getPrediction <- function(ptest){ 
    corpus <- Corpus(VectorSource(ptest)) 
    corpus.clean <- corpus %>% 
    tm_map(content_transformer(tolower)) %>% 
    tm_map(removePunctuation) %>% 
    tm_map(removeNumbers) %>% 
    tm_map(removeWords, stopwords(kind="en")) %>% 
    tm_map(stripWhitespace) 
    corpus.clean.test <- corpus.clean 
    fivefreq <- findFreqTerms(dtm.train, 5) 
    dtm.test.nb <- DocumentTermMatrix(corpus.clean.test, control=list(dictionary = fivefreq)) 
    convert_count <- function(x) { 
    y <- ifelse(x > 0, 1,0) 
    y <- factor(y, levels=c(0,1), labels=c("No", "Yes")) 
    y 
    } 
    testNB <- apply(dtm.test.nb, 2, convert_count) 
    pred <- predict(classifier, newdata=testNB) 
    pred 
} 

Was kann ich tun, um die Vorhersage als Ausgabe zu drucken?

Dank enter image description here

+0

Es gibt eine Zeichenkette. Wie Sie mit Print-Statements feststellen können. Funktioniert gut Ich denke, was glaubst du, woher kommt der Fehler? –

+1

Ich habe versucht, es zu laufen, aber ich sehe nicht, wo Sie 'dtm.train' definieren, es stirbt dort Form mich. –

+0

Oh, richtig, ich habe das entfernt. Jetzt bekomme ich einen neuen Fehler: $ Operator ist ungültig für atomare Vektoren. An diesem Punkt weiß ich es nicht wirklich. Ich benutze auch zum ersten Mal glänzend. Dies ist der gesamte Code: http://www.r-fiddle.org/#/fiddle?id=uq2FrPgE&version=2 Können Sie es ausführen? Danke für Ihre Hilfe. – 0x1

Antwort

1

Es gibt ein paar Probleme in Ihrem Server-Code.

  • Es hilft bei der eine req(input$caption) Aussage zu setzen Shiny zu halten über Daten mit nicht initialisierten Werten laufen
  • Sie machen den Text mit renderUI. Dies dient zum dynamischen Erstellen von Eingabesteuerelementen auf dem Server, die dann im UI-Teil verwendet werden.
  • Stattdessen renderText verwenden.
  • Sie könnten auch in Betracht ziehen, renderPrint zu verwenden. Wenn Sie das mit verbatimPrintOutput auf der UI-Seite koppeln, können Sie alle Druckanweisungen in Ihrer UI sehen, die immens mit dem Debuggen helfen können.

Hier ist die geänderte Code - mit verbatimPrintOutput zum Debuggen:

getPrediction <- function(ptest){ 
    print(sprintf("getPrediction - ptest:%s",ptest)) 
    corpus <- Corpus(VectorSource(ptest)) 
    corpus.clean <- corpus %>% 
    tm_map(content_transformer(tolower)) %>% 
    tm_map(removePunctuation) %>% 
    tm_map(removeNumbers) %>% 
    tm_map(removeWords, stopwords(kind="en")) %>% 
    tm_map(stripWhitespace) 
    corpus.clean.test <- corpus.clean 
    dtm.test.nb <- DocumentTermMatrix(corpus.clean.test) 
    convert_count <- function(x) { 
    y <- ifelse(x > 0, 1,0) 
    y <- factor(y, levels=c(0,1), labels=c("No", "Yes")) 
    y 
    } 
    testNB <- apply(dtm.test.nb, 2, convert_count) 
    pred <- predict(classifier, newdata=as.matrix(testNB)) 
    pred 
} 

# app.R 
library(shiny) 
server <- function(input, output) { 
    text1 <- eventReactive(input$actionButton,{ 
    req(input$caption) 
    getPrediction(input$caption) 
    }) 
    output$text1 <- renderPrint({ 
    text1() 
    }) 
} 

ui <- fluidPage(
    sidebarLayout(
    sidebarPanel(
     textAreaInput(inputId="caption", label="Put your text here", width="100%", height="400px", value="", placeholder = "Placeholder"), 
     actionButton("actionButton", label = "Submit") 
    ), 
    mainPanel(
     h3("Name"), 
     verbatimTextOutput("text1") 
    ) 
) 
) 

Und die Ausgabe: enter image description here

+0

Verstanden. Danke vielmals! – 0x1