2017-05-25 6 views
1

私の光沢のあるアプリは、テキストを入力として受け取り、1単語のテキストを出力として出力することになっています。しかし、明らかに私はエラーを取得します - "引数は文字ベクトルではありません"。これらは私のコードです:r shinyのtextAreaInputはどのような型を返しますか?

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 
} 

私は出力として予測をプリントアウトするために何ができますか?

おかげ enter image description here

+0

それは文字列を返します。あなたはprintステートメントで確かめることができます。うまく動作すると思いますが、どこからエラーが発生していると思いますか? –

+1

私はそれを実行しようとしましたが、どこに 'dtm.train'を定義するのかわかりません。 –

+0

ああ、私はそれを取り除いた。今私は新しいエラーを取得しています:$演算子は、原子ベクトルのために無効です。この時点で、私は本当に知りません。私も初めて光沢を使用しています。これはコード全体です:http://www.r-fiddle.org/#/fiddle?id=uq2FrPgE&version=2 実行できますか?ご協力いただきありがとうございます。 – 0x1

答えて

1

サーバーのコードに問題がいくつかあります。

  • それはあなたがrenderUIとテキストのレンダリングされている初期化されていない値
  • とデータ上で実行されているから、シャイニーを保つためにそこにreq(input$caption)文を置くのに役立ちます。これは、サーバーに入力コントロールを動的に作成し、その後UI部分で使用するためのものです。
  • 代わりにrenderTextを使用してください。
  • renderPrintを使用して検討することもできます。これをUI側でverbatimPrintOutputとペアにすると、UIのすべての印刷文が表示され、デバッグに非常に役立ちます。ここで

変更されたコードである - デバッグ用verbatimPrintOutputを使用して:

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") 
    ) 
) 
) 

そして出力:enter image description here

+0

入手しました。どうもありがとう! – 0x1

関連する問題