我正在尝试构建进行情绪分析的Shiny App。我有正常执行脚本的代码,Rstudio从email.csv文件导入数据。此文件仅包含2列(SentTo和RawText),我正在分析的文本位于B2单元格中。 一旦我运行下面的代码,我得到一个很好的图表来衡量情绪。
library(readr)
library("ggplot2")
library('syuzhet')
Emails <- read_csv("C:/email.csv")
d<-get_nrc_sentiment(Emails$RawText)
td<-data.frame(t(d))
td_new <- data.frame(rowSums(td[1:14]))
names(td_new)[1] <- "count"
td_new <- cbind("sentiment" = rownames(td_new), td_new)
rownames(td_new) <- NULL
td_new2<-td_new[1:8,]
qplot(sentiment, data=td_new2, weight=count,
geom="bar",fill=sentiment)+ggtitle("Email sentiments")
现在我要做的是稍微修改一下这段代码并通过下一步构建Shiny应用程序:
ui.R
# Adding the Imput text field to the app
shinyUI(fluidPage(
textAreaInput("UserInput", "Caption", "Please Enter Your Text", width =
"500px", height = "300px"),
mainPanel(
plotOutput("distPlot"))
))
Server.R
library(shiny)
library(syuzhet)
library(ggplot2)
# Define server logic required to draw a histogram
shinyServer(function(input, output) {
output$distPlot <- renderPlot({
Emails <- input$UserInput
d<-get_nrc_sentiment(Emails)
td<-data.frame(t(d))
td_new <- data.frame(rowSums(td[1:14]))
names(td_new)[1] <- "count"
td_new <- cbind("sentiment" = rownames(td_new), td_new)
rownames(td_new) <- NULL
td_new2<-td_new[1:8,]
qplot(sentiment, data=td_new2, weight=count,
geom="bar",fill=sentiment)+ggtitle("Email sentiments")
})
})
所以ti构建应用程序,但即使我将一些文本粘贴到字段中,似乎我在server.R部分中使用的代码没有做它需要做的事情。 如果我用(电子邮件&lt; - read_csv(“C:/email.csv”))替换server.R部分中的行(电子邮件&lt; - 输入$ UserInput) 比它工作正常。这告诉我问题在于我将文本传递给电子邮件的方式。通过输入形成其文本通过csv文件,它是包含数据的第二行和第二列。接下来的代码我认为它看起来是特定的格式。 有人建议如何修改它以使其工作? 先感谢您。
答案 0 :(得分:1)
在绘制闪亮之前,首先让它输出用户输入,以便您了解传递给下一步的内容。 verbatimTextOutput('input$UserInput')
和verbatimTextOutput('dput(input$UserInput)')
。我猜这将是一个长度为1的字符向量。
现在,回到你的代码以外的光亮并传递它相同的输入,格式完全相同。现在你的代码是从csv文件获取data.frame并传递一个列,这将是一个字符向量。
一旦你让它在闪亮之外工作,使用由闪亮解析的输入,使你的闪亮应用程序工作的修复应该是清楚的。
答案 1 :(得分:1)
我认为这个问题符合要求:
td_new <- data.frame(rowSums(td[1:14]))
如果我将其更改为以下内容,则对我有用:
td_new <- data.frame(rowSums(td))
我不确定你为什么在那里有1:14指数,但我不知道它的作用。