R 如何避免此输出错误?

R 如何避免此输出错误?,r,shiny,R,Shiny,我正在构建一个闪亮的应用程序,它显示带有条件突出显示的文本,以显示常见的情绪分析词典如何对该文本进行评分。当我使用一个简单的示例作为输入字符串时,该应用程序可以工作,但当我尝试使用较长的刮取字符串时,它抛出“错误:要写入的文本必须是长度为一个字符的向量”。在这两种情况下,我的文本注释过程的输入都是一个长度为一个字符的向量,所以我不明白为什么在后一种情况下它会失败,或者如何适应它 这里有一个可复制的例子。这项工作: library(shiny) library(tidyverse) library

我正在构建一个闪亮的应用程序,它显示带有条件突出显示的文本,以显示常见的情绪分析词典如何对该文本进行评分。当我使用一个简单的示例作为输入字符串时,该应用程序可以工作,但当我尝试使用较长的刮取字符串时,它抛出“错误:要写入的文本必须是长度为一个字符的向量”。在这两种情况下,我的文本注释过程的输入都是一个长度为一个字符的向量,所以我不明白为什么在后一种情况下它会失败,或者如何适应它

这里有一个可复制的例子。这项工作:

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)

你知道为什么这个字符串会破坏应用程序,而另一个不会吗?我尝试了一些简单的方法,比如在处理字符串之前删除破折号和回车符,但这没有什么区别。

这很奇怪,对于下载的文本,我使用1000个单词(0-1000、1000-2000等)的子集手动运行循环,其中一些单词将所有内容分解,例如“投票”、“呈现”。。。删除这些单词似乎可以解决问题,但我不知道为什么。如果您想确信这一点,请选取文本的一个子集,在其上运行
strsplit
lapply
函数(无光泽),并更改中断函数的单词(通常不超过4或5个)。当你用这个正确的子集运行它时,这个应用程序应该可以工作。另外,我在strsplit中添加了一些字符,它可能会帮助你:
“\n\n\n\124\-\ 124\\,\ 124\.\ n\n\124\\”[[1]
@bretauv,我需要继续寻找一个可以推广的解决方案,但这是一个有趣的线索,谢谢。
example.text <- read_html("https://www.usconstitution.net/const.txt") %>% html_text()