Я создаю приложение Shiny, которое отображает текст с условной подсветкой, чтобы показать, как обычные словари анализа настроений будут оценивать этот текст. Приложение работает, когда я использую простой пример в качестве входной строки, но оно выдает «Ошибка: текст должен быть записан в виде символа длиной в одну единицу», когда я пытаюсь использовать вместо этого более длинные очищенные строки. В обоих случаях входные данные для моего процесса аннотирования текста представляют собой символьный вектор длины один, поэтому я не понимаю, почему он не работает в последней ситуации или как его подогнать.
Вот воспроизводимый пример. Это работает:
library(shiny)
library(tidyverse)
library(tidytext)
library(rvest)
nrc_sentiments <- get_sentiments("nrc") %>%
filter(sentiment == "negative" | sentiment == "positive") %>%
mutate(color = recode(sentiment, positive = "Aqua", negative = "Yellow"))
example.text <- "We laughed, we cried, we sang, we dreamt of happier days to come and cursed the ones who abandoned us. I hate Mondays. I like beer."
ui <- mainPanel(fluidRow(uiOutput("thetextoutput")))
server <- function(input, output){
output$thetextoutput <- renderUI({
bag_of_words <- strsplit(example.text, " ")[[1]]
lapply(bag_of_words, function(x) {
col <- "White"
if (tolower(x) %in% nrc_sentiments$word) {
col <- nrc_sentiments$color[which(nrc_sentiments$word == x)]
}
tags$span(style = paste("background-color:", col), x)
})
})
}
shinyApp(ui, server)
Если, однако, я вместо этого использую следующую строку кода для генерации входной строки, а затем запускаю приложение с тем же ui
и server
кодом, как указано выше, я получаю вышеупомянутое «Ошибка: Текст, который должен быть написан, должен быть вектором длины один символ».
example.text <- read_html("https://www.usconstitution.net/const.txt") %>% html_text()
Есть идеи, почему эта строка ломает приложение, а другая - нет? Я попробовал некоторые простые вещи, такие как удаление черточек и возврат каретки из строки перед обработкой, но это не имело никакого значения.