简体   繁体   中英

how to get the list in R shinydashboard

I am getting the all the text like a paragraph. I want all the text in the list format for example - li in html. Please help me in this. I tried using vector but was not able to do. That is the reason i appended each and every text using paste0 method using sep="\\n" But \\n is not showing up with new line.

My ui.R file is

# 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)
      )
    )
  )
))

My server.R file is

# 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) {

})

A possible solution to your problem would be to append vectors with html tag <br> instead of "\\n" (which would work fine with cat and verbatimTextOutput ) and then to wrap, say, positiveTweets into HTML function like this:

h4(HTML(positiveTwe‌​ets))

You also want to display new tabs with the names of files in the current working directory.

In the example below I created a new menuItem which contains a random number of tabs which have random names.

First, in dashboardHeader I added dynamical output with an ID out1 .

menuItemOutput("out1")

After that, on the server side, for testing purposes, I defined a variable my_files which contains a random number of tabs with random names. It will be updated each time you run the app.

Finally, within renderUI I defined menuItem ("Files") and placed within it a dynamical number of menuSubItem s, which are generated with lapply .

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

I also added a comment which tries to explain what you could do if you wanted to update a list of files in a working directory (and hence the names of tabs in the app) while the app is running.


Full example:

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)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM