Блестящая ошибка с textAreaInput - текст должен быть символьным

Я пытаюсь написать небольшое блестящее приложение. Частью приложения является обобщение текста, который пользователь вставляет в поле, а затем нажимает кнопку действия. Я скопировал текстовый пример из онлайн-блога, и он работает за пределами блестящего

Я использовал код кнопки действия с блестящего веб-сайта.

когда я запускаю приведенный ниже код, я получаю эту ошибку Error in sentenceParse(text, docId = docId) : text must be character Я предположил, что это может быть связано с тем, что вывод из текстового поля (n или ntext) не является фактором. Поэтому я попытался изменить с помощью as.factor(ntext), но все равно безуспешно.

Я ценю любое руководство.

благодарю вас

library(shiny)
library(lexRankr)

# 
ui <- fluidPage(
    textAreaInput("n", "Paste text and click submit", rows = 5),
    br(),
    actionButton("goButton", "Go!"),
    verbatimTextOutput("nText")
    
)


#
server <- function(input, output) {
    
    ntext <- eventReactive(input$goButton, {
        input$n
    })  
    
    
    
    #perform lexrank for top 3 sentences
    top_3 = lexRankr::lexRank(ntext,
        docId = rep(1, length(ntext)),
        n = 3,
        continuous = TRUE)
    
    #reorder the top 3 sentences to be in order of appearance in article
    order_of_appearance = order(as.integer(gsub("_","",top_3$sentenceId)))
    #extract sentences in order of appearance
    ordered_top_3 = top_3[order_of_appearance, "sentence"]
    
    
    
    output$nText <- renderText({
        ordered_top_3()
    })
}



# 

shinyApp(ui = ui, server = server)


person Bahi8482    schedule 02.10.2020    source источник


Ответы (1)


Вам нужно вызвать реактивную функцию как ntext(). Поскольку это реактив, он должен быть в observer.

Обновить

Шириной вывода можно управлять с помощью div(). См. обновленный код ниже.

library(shiny)
library(lexRankr)

ui <- fluidPage(
  textAreaInput("n", "Paste text and click submit", width='300px', rows=5),
  br(),
  actionButton("goButton", "Go!"),
  div(style="width:500px;padding-left:100px;",fluidRow(verbatimTextOutput("nText", placeholder = TRUE)))
  #verbatimTextOutput("nText")
  
)

server <- function(input, output) {
  
  ntext <- eventReactive(input$goButton, {
    req(input$n)
    input$n
  })  
  
  observe({
    #perform lexrank for top 3 sentences
    top_3 = lexRankr::lexRank(ntext(),
                            docId = rep(1, length(ntext())),
                            n = 3,
                            continuous = TRUE)

    #reorder the top 3 sentences to be in order of appearance in article
    order_of_appearance = order(as.integer(gsub("_","",top_3$sentenceId)))

    #extract sentences in order of appearance
    ordered_top_3 = top_3[order_of_appearance, "sentence"]
  
    output$nText <- renderText({
      ordered_top_3
    })
  })
}

shinyApp(ui = ui, server = server)
person YBS    schedule 02.10.2020
comment
благодарю вас. Это исправило это! У меня есть еще один вопрос. Как изменить ширину поля renderText? теперь он заполняет всю ширину экрана, есть ли способ сделать его менее широким? - person Bahi8482; 02.10.2020
comment
Ответ очень полезен. спасибо, что нашли время ответить на мой вопрос. - person Bahi8482; 02.10.2020