闪亮的应用程序 - 将字符串传递给变量

时间:2017-07-05 18:55:55

标签: r shiny

我正在尝试构建进行情绪分析的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")

enter image description here

现在我要做的是稍微修改一下这段代码并通过下一步构建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")

  })
})

运行应用程序后,我收到此错误: enter image description here

所以ti构建应用程序,但即使我将一些文本粘贴到字段中,似乎我在server.R部分中使用的代码没有做它需要做的事情。 如果我用(电子邮件&lt; - read_csv(“C:/email.csv”))替换server.R部分中的行(电子邮件&lt; - 输入$ UserInput) 比它工作正常。这告诉我问题在于我将文本传递给电子邮件的方式。通过输入形成其文本通过csv文件,它是包含数据的第二行和第二列。接下来的代码我认为它看起来是特定的格式。 有人建议如何修改它以使其工作? 先感谢您。

2 个答案:

答案 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指数,但我不知道它的作用。