2016-08-16 86 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)