2016-08-16 48 views
0

我得到了像段落一样的所有文本。我希望列表格式中的所有文本例如 - li在html中。请帮助我。我尝试使用矢量,但无法做到。这就是我使用sep =“\ n”使用paste0方法添加每个文本的原因,但是\ n没有用新行显示。如何获取R shinydashboard中的列表

我ui.R文件

# shinydashboard makes it easy to use Shiny to create dashboards 
# shinydashboard requires Shiny 0.11 or above 

#First Selecting the shiny Dashboard 
library(shiny) 
library(shinydashboard) 
library(openxlsx) 

FileNames <- list.files("ExcelSheets/") 
countDays <- length(FileNames) 
positive = 0 
neutral = 0 
negative = 0 
count = 0 
positiveTweets = "" 
negativeTweets = "" 
neutralTweets = "" 
p = 1 
nu = 1 
ng = 1 
for (i in seq(1, length(FileNames))) 
{ 
    excelSheetData = read.xlsx(paste0("ExcelSheets/", FileNames[i]), startRow = 0, colNames = TRUE, detectDates = TRUE) 
    countRows <- dim(excelSheetData) 
    countRows <- countRows[1] 

    rows <- countRows 
    count = count + rows 
    data = excelSheetData[, c("polarity", "polarity_confidence", "Text")] 
    for (j in seq(1, rows)){ 
    if(data[j, 1] == "positive") 
    { 
     positive = positive + data[j, 2] 
     positiveTweets = paste0(positiveTweets, paste0(paste(paste0(p, ":"), data[j,3]), "\n")) 
     p = p + 1 
    } 
    else if(data[j, 1] == "negative") 
    { 
     negative = negative + data[j, 2] 
     negativeTweets = paste0(negativeTweets, paste0(paste(paste0(ng, ":"), data[j,3]), "\n")) 
     ng = ng + 1 
    } 
    else 
    { 
     neutral = neutral + data[j, 2] 
     neutralTweets = paste0(neutralTweets, paste0(paste(paste0(nu, ":"), data[j,3]), "\n")) 
     nu = nu + 1 
    } 
    } 
} 
total <- positive + negative + neutral 
positivePercent <- round((positive * 100)/total) 
negativePercent <- round((negative * 100)/total) 
neutralPercent <- round((neutral * 100)/total) 

countVect = c(positive, neutral, negative) 


shinyUI(dashboardPage(
    dashboardHeader(title = "Sentiment Analysis"), 
    dashboardSidebar(
    sidebarMenu(
     menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")), 
     menuItem("Tweets", icon = icon("twitter"), 
       menuSubItem("Positive Tweets", tabName = "pTweets", icon = icon("thumbs-up")), 
       menuSubItem("Neutral Tweets", tabName = "neuTweets", icon = icon("hand-spock-o")), 
       menuSubItem("Negative Tweets", tabName = "negTweets", icon = icon("thumbs-down")) 
    ) 
    ) 
), 
    ## Body content 
    dashboardBody(

    tabItems(
     # First tab content 
     tabItem(tabName = "dashboard", 
       div(class = "my-class", h2("Sentiment Analysis of Twitter Tweets using RapidMinor and Shiny Dashboard.")), 
       fluidRow(
       valueBox(count, "Total Number of Tweets Analyzed in the competition", icon = icon("twitter"), width = 6), 
       valueBox(countDays, "Number of Days ", icon = icon("calendar-check-o"), width = 6, color = "yellow") 
      ), 
       fluidRow(
       infoBox("Positive", paste(positivePercent, "%"), icon = icon("thumbs-up"), width = 4, fill = TRUE, color = "green"), 
       infoBox("Neutral", paste(neutralPercent, "%"), icon = icon("hand-spock-o"), width = 4, fill = TRUE, color = "light-blue"), 
       infoBox("Negative", paste(negativePercent, "%"), icon = icon("thumbs-down"), width = 4, fill = TRUE, color = "red") 
      ) 
    ), 

     # Positive Tweets tab content 
     tabItem(tabName = "pTweets", 
       h2("Positive Tweets #Brexit"), 
       h4(positiveTweets) 
    ), 
     # Neutral Tweets tab content 
     tabItem(tabName = "neuTweets", 
       h2("Neutral Tweets #Brexit"), 
       h4(neutralTweets) 
    ), 
     # Negative Tweets tab content 
     tabItem(tabName = "negTweets", 
       h2("Negative Tweets #Brexit"), 
       h4(negativeTweets) 
    ) 
    ) 
) 
)) 

我server.R文件

# This is the server logic for a Shiny web application. 
# You can find out more about building applications with Shiny here: 
# 
# http://shiny.rstudio.com 
# 

library(shiny) 
library(shinydashboard) 

shinyServer(function(input, output) { 

}) 
+0

对不起..编辑@nrussell – Spider

+1

代替' “\ n”'你可以尝试使用HTML标记''
追加载体。 –

+0

@UnnamedUser不是。输出也是一样。它显示
在文本 – Spider

回答

1

一个可能的解决问题的方法是使用HTML标签<br>追加矢量而不是"\n"(它可以很好地与catverbatimTextOutput一起工作),然后包装,比如positiveTweetsHTML功能是这样的:

h4(HTML(positiveTwe‌​ets)) 

你也想显示与文件的当前工作目录中的名称新的选项卡。

在下面的示例中,我创建了一个新的menuItem,其中包含随机数字的随机数字的选项卡。

首先,在dashboardHeader我添加了ID out1的动态输出。

menuItemOutput("out1") 

在此之后,在服务器端,用于测试目的,我定义的变量my_files其中包含与随机名称的选项卡的一个随机数。它会在您每次运行应用时更新。

最后,内renderUI我定义menuItem(“文件”),并放置在其内的menuSubItem s,这与lapply产生的动力数量。

output$out1 <- renderUI({ ... }) 

我也加入其中,试图解释,如果你想更新的文件在工作目录,而应用程序正在运行的列表(并因此在应用程序选项卡的名字),你可以做什么评论。


完整的示例:

library(shiny) 
library(shinydashboard) 
#library(openxlsx) 
rm(ui) 
rm(server) 


ui <- shinyUI(dashboardPage(
    dashboardHeader(title = "Sentiment Analysis"), 
    dashboardSidebar(
    sidebarMenu(
     menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")), 
     menuItem("Tweets", icon = icon("twitter"), 
       menuSubItem("Positive Tweets", tabName = "pTweets", icon = icon("thumbs-up")), 
       menuSubItem("Neutral Tweets", tabName = "neuTweets", icon = icon("hand-spock-o")), 
       menuSubItem("Negative Tweets", tabName = "negTweets", icon = icon("thumbs-down")) 
    ), 
     menuItemOutput("out1") # added 
    ) 
), 
    ## Body content 
    dashboardBody(

    tabItems(
     # First tab content 
     tabItem(tabName = "dashboard", 
       div(class = "my-class", h2("Sentiment Analysis of Twitter Tweets using RapidMinor and Shiny Dashboard.")), 
       fluidRow(
       #valueBox(count, "Total Number of Tweets Analyzed in the competition", icon = icon("twitter"), width = 6), 
       valueBox(15, "Total Number of Tweets Analyzed in the competition", icon = icon("twitter"), width = 6), 
       #valueBox(countDays, "Number of Days ", icon = icon("calendar-check-o"), width = 6, color = "yellow") 
       valueBox(10, "Number of Days ", icon = icon("calendar-check-o"), width = 6, color = "yellow") 
      ), 
       fluidRow(
       #infoBox("Positive", paste(positivePercent, "%"), icon = icon("thumbs-up"), width = 4, fill = TRUE, color = "green"), 
       infoBox("Positive", "80%", icon = icon("thumbs-up"), width = 4, fill = TRUE, color = "green"), 
       infoBox("Neutral", "15%", icon = icon("hand-spock-o"), width = 4, fill = TRUE, color = "light-blue"), 
       infoBox("Negative", "5%", icon = icon("thumbs-down"), width = 4, fill = TRUE, color = "red") 
      ) 
    ), 

     # Positive Tweets tab content 
     tabItem(tabName = "pTweets", 
       h2("Positive Tweets #Brexit"), 
       #h4(positiveTweets) 
       h4("Great") 
    ), 
     # Neutral Tweets tab content 
     tabItem(tabName = "neuTweets", 
       h2("Neutral Tweets #Brexit"), 
       #h4(neutralTweets) 
       h4("ok") 
    ), 
     # Negative Tweets tab content 
     tabItem(tabName = "negTweets", 
       h2("Negative Tweets #Brexit"), 
       #h4(negativeTweets) 
       h4("shit :D") 
    ) 
    ) 
) 
)) 

server <- function(input, output) { 

    #my_files will be updated each time you run the app 
    #my_files <- list.files() 

    # for testing purposes generate 5 tabs with names given by random letters 
    my_files <- letters[sample(1:26, 5)] 

    # There could also be the case when there is no files in a folder 
    # You can handle it with `req` or `validate(need(...))` functions 
    #my_files <- "" 

    output$out1 <- renderUI({ 
    # Just in case if you would put new files to the folder 
    # while the app is working and wanted an update of tabs: 
    # - create eventReactive with an actionButton which will 
    #  return list.files(). 
    # - pass new names of files to this renderUi function. 

    # be careful because "tabName" must not have a "." in it. 

    req(my_files) # show tabs only if there are files in a directory 

    # generate and save tabs in a list 
    tabs <- lapply(seq_along(my_files), function(i) { 
     menuSubItem(my_files[i], tabName = my_files[i], icon = icon("thumbs-up")) 
    }) 

    menuItem("Files", tabName = "Files", icon = NULL, tabs) 
    }) 
} 
shinyApp(ui, server)