2017-03-15 8 views
1

私は現在、R、より具体的にはシンダッシュボードを使って...よくダッシュボードを作成する方法を学んでいます。 私はRの初心者なので、私はshinydashboardチュートリアル(https://rstudio.github.io/shinydashboard/structure.html)に取り組み、それを再現して自分のニーズに合わせようとしています。動的コンテンツ、特に動的メッセージメニューに関するコード部分まではすべてうまくいった。 チュートリアルの対話型メッセージメニューのコードをコピーしてスクリプト全体を実行すると、光沢のあるウィンドウがポップアップし、すぐにエラーメッセージが表示されました(コードとメッセージについては以下を参照)。 次に、動的なメニューの他の例のためにインターネットを見ようとしましたが、いくつか見つかりましたが、関数renderMenuが使用されるたびに、すばやくポップアップして閉じている光沢のあるウィンドウで同じエラーメッセージが表示されます。レンダーメニューを使用した定期的なエラーR

ここで私は問題の一部にまで持っていたコード(すべては、私はいくつかの記述やインタラクティブなコンテンツを持つ光沢のあるウィンドウを取得、うまくいくように見える)です:

library(shiny) 
library(shinydashboard) 

ui <- dashboardPage(
    dashboardHeader(title="AQUILAIR PLUS", 
       dropdownMenu(type = "messages", 
          messageItem(
          from = "Sales Dept", 
          message = "Sales are steady this month." 
          ), 
          messageItem(
          from = "New User", 
          message = "How do I register?", 
          icon = icon("question"), 
          time = "13:45" 
          ), 
          messageItem(
          from = "Support", 
          message = "The new server is ready.", 
          icon = icon("life-ring"), 
          time = "2014-12-01" 
          )), 
       dropdownMenu(type = "notifications", 
             notificationItem(
              text = "5 new users today", 
              icon("users") 
             ), 
             notificationItem(
              text = "12 items delivered", 
              icon("truck"), 
              status = "success" 
             ), 
             notificationItem(
              text = "Server load at 86%", 
              icon = icon("exclamation-triangle"), 
              status = "warning" 
             ) 
          )    
      ), 
    dashboardSidebar(
    sidebarMenu(
     menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")), 
     menuItem("Widgets", tabName = "widgets", icon = icon("th")) 
) 
), 

    dashboardBody(
    tabItems(
     # First tab content 
     tabItem(tabName = "dashboard", 
       h2("Graphes de suivi"), 
    fluidRow(
     box(title = "Graphiques", status = "primary", 
      plotOutput("plot1", height = 250), 
      plotOutput("plot2", height = 250) 
    ), 

     box(title= "Informations", status = "info", 
    "Texte descriptif", br(), "blablabla", 
    sliderInput("slider", "Number of observations:", 1, 100, 50), 
    sliderInput("slider2", "Curseur 2:", 1, 200, 25), 
    textInput("text", "Commentaire :") 
), 
     box(title = "Commentaires éventuels", status="success", 
     solidHeader = TRUE, 
     collapsible = TRUE, 
    "Commentaire :", 
    textOutput("text") 
    ) 
    ) 
), 
    # Second tab content 
    tabItem(tabName = "widgets", 
     h2("Widgets tab*** content") 
) 
) 
) 
) 

server <- function(input, output) { 
    set.seed(122) 
    histdata <- rnorm(500) 
    output$text <- renderText({ 
    print(input$text) 
    }) 
    output$plot1 <- renderPlot({ 
    data <- histdata[seq_len(input$slider)] 
    hist(data) 
    }) 
    output$plot2 <- renderPlot({ 
    data2 <- histdata[seq_len(input$slider2)] 
    hist(data2) 
    }) 

    } 

shinyApp(ui, server) 

その後、私はチュートリアルをコピー&ペーストしようとしたが、 UI部分に

:動的なメッセージメニューを取得する

dashboardHeader(dropdownMenuOutput("messageMenu")) 

サーバーの一部に:

output$messageMenu <- renderMenu({ 
    # Code to generate each of the messageItems here, in a list. This assumes 
    # that messageData is a data frame with two columns, 'from' and 'message'. 
    msgs <- apply(messageData, 1, function(row) { 
    messageItem(from = row[["from"]], message = row[["message"]]) 
    }) 

    # This is equivalent to calling: 
    # dropdownMenu(type="messages", msgs[[1]], msgs[[2]], ...) 
    dropdownMenu(type = "messages", .list = msgs) 
}) 

次のエラーメッセージで終了ウィンドウが来る:

Warning: Error in markRenderFunction: unused argument (outputArgs =  outputArgs) 
Stack trace (innermost first): 
45: markRenderFunction 
44: renderMenu 
43: server [#15] 
4: <Anonymous> 
3: do.call 
2: print.shiny.appobj 
1: <Promise> 
Error in markRenderFunction(uiOutput, renderFunc, outputArgs = outputArgs) : 
    unused argument (outputArgs = outputArgs)" 

は、私が最初のMessageDataが定義されていなかったことを考え出したので、私は、コードの先頭に追加:

messageData = data.frame('from' = c('me', 'you', 'them'), 'message' = c('first message' ,'second','third')) 

ウィンドウの動作やエラーメッセージは変更されませんでした。私が言ったように、私は助けていないとまったく同じコードを、といういくつかのこと、多くの例を発見した...しかし、動的メニューの他の例を探してい

library(shiny) 
library(shinydashboard) 
messageData = data.frame('from' = c('me', 'you', 'them'), 'message' = c('first message' ,'second','third')) 

ui <- dashboardPage(
    dashboardHeader(title="AQUILAIR PLUS", 
       dropdownMenu(type = "messages", 
          messageItem(
          from = "Sales Dept", 
          message = "Sales are steady this month." 
          ), 
          messageItem(
          from = "New User", 
          message = "How do I register?", 
          icon = icon("question"), 
          time = "13:45" 
          ), 
          messageItem(
          from = "Support", 
          message = "The new server is ready.", 
          icon = icon("life-ring"), 
          time = "2014-12-01" 
          )), 
       dropdownMenuOutput("messageMenu"), 
       dropdownMenu(type = "notifications", 
             notificationItem(
              text = "5 new users today", 
              icon("users") 
             ), 
             notificationItem(
              text = "12 items delivered", 
              icon("truck"), 
              status = "success" 
             ), 
             notificationItem(
              text = "Server load at 86%", 
              icon = icon("exclamation-triangle"), 
              status = "warning" 
             ) 
          )    
      ), 
    dashboardSidebar(
    sidebarMenu(
     menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")), 
     menuItem("Widgets", tabName = "widgets", icon = icon("th")) 
    )), 

    dashboardBody(
    tabItems(
     # First tab content 
     tabItem(tabName = "dashboard", 
      h2("Graphes de suivi"), 
    fluidRow(
     box(title = "Graphiques", status = "primary", 
     plotOutput("plot1", height = 250), 
     plotOutput("plot2", height = 250) 
    ), 

     box(title= "Informations", status = "info", 
     "Texte descriptif", br(), "blablabla", 
     sliderInput("slider", "Number of observations:", 1, 100, 50), 
     sliderInput("slider2", "Curseur 2:", 1, 200, 25), 
     textInput("text", "Commentaire :") 
    ), 
     box(title = "Commentaires éventuels", status="success", 
      solidHeader = TRUE, 
      collapsible = TRUE, 
     "Commentaire :", 
     textOutput("text") 
    ) 
    ) 
), 
     # Second tab content 
     tabItem(tabName = "widgets", 
      h2("Widgets tab*** content") 
) 
) 
) 
) 

server <- function(input, output) { 
    set.seed(122) 
    histdata <- rnorm(500) 
    output$text <- renderText({ 
    print(input$text) 
    }) 
    output$plot1 <- renderPlot({ 
    data <- histdata[seq_len(input$slider)] 
    hist(data) 
    }) 
    output$plot2 <- renderPlot({ 
    data2 <- histdata[seq_len(input$slider2)] 
    hist(data2) 
    }) 
    output$messageMenu <- renderMenu({ 
    msgs <- apply(messageData, 1, function(row) { 
     messageItem(from = row[["from"]], message = row[["message"]]) 

    }) 
dropdownMenu(type = "messages", .list = msgs) 
    }) 
    } 

shinyApp(ui, server) 

: はここに私の全体の「エラーが発生したコード」ですrenderMenuのヘルプで、このいずれかを、私を見つけました:

# ========== Dynamic sidebarMenu ========== 
ui <- dashboardPage(
    dashboardHeader(title = "Dynamic sidebar"), 
    dashboardSidebar(
    sidebarMenuOutput("menu") 
), 
    dashboardBody() 
) 

server <- function(input, output) { 
    output$menu <- renderMenu({ 
    sidebarMenu(
     menuItem("Menu item", icon = icon("calendar")) 
    ) 
    }) 
} 

shinyApp(ui, server) 

...そして、それは私にまったく同じウィンドウの動作と私はrenderMenu機能の深刻な問題を抱えていることを、私は推測する、意味のエラーメッセージを与えます。 私は自分のコードにoutputArgsを挿入しようとしましたが、それがリストでなければなりませんが、どのように、どこで使われるのかは分かりません。

私は何か巨大なものを逃した場合は事前にお詫び申し上げます。私はそれが多くの人に基本的なコードに見えるかもしれないことを知っていますが、私は初心者であり、私は私の非動的なメニューで詰まっているようにいくつかの助け/ explainationsを本当に感謝するでしょう:(

答えて

1

私はmessageDataは形式でなければならないと思う:

messageData = data.frame('from' = c('me', 'you'), 'message' = c('first message' ,'second')) 

メッセージデータがのMessageDataが良いでなければ何も入力を提供しない以下のようなものを、使用して有効である場合にも、あなたのレンダリングコードでチェックすることができます私はjsut気づいた

output$messageMenu <- renderMenu({ 
    req(messageData, cancelOutput = TRUE) 
    msgs <- apply(messageData, 1, function(row) { 
     messageItem(from = row[["from"]], message = row[["message"]]) 
    }) 
    dropdownMenu(type = "messages", .list = msgs) 
    }) 

、あなたはいくつかの見当違いを持っ​​ていますあなたが言うことなく修正した括弧。最後のコードブロックには、次のものがあります。

output$messageMenu <- renderMenu({ 
    msgs <- apply(messageData, 1, function(row) { 
     messageItem(from = row[["from"]], message = row[["message"]]) 
    dropdownMenu(type = "messages", .list = msgs) # this should be outside the fucntion in the apply call. 
    }) 
    }) 
    } 

編集:ここでは、正常に実行されているコードの完全なコピーと貼り付けがあります。 messageDataが無効な場合にreq()コードがどのように役立つかを見てみましょう。

library(shiny) 
library(shinydashboard) 
messageData = data.frame("from" = c('me', 'you'), "message" = c('first message' ,'second')) 
#messageData = NULL 

ui <- dashboardPage(
    dashboardHeader(title="AQUILAIR PLUS", 
        dropdownMenu(type = "messages", 
           messageItem(
           from = "Sales Dept", 
           message = "Sales are steady this month." 
           ), 
           messageItem(
           from = "New User", 
           message = "How do I register?", 
           icon = icon("question"), 
           time = "13:45" 
           ), 
           messageItem(
           from = "Support", 
           message = "The new server is ready.", 
           icon = icon("life-ring"), 
           time = "2014-12-01" 
           )), 
        dropdownMenuOutput("messageMenu"), 
        dropdownMenu(type = "notifications", 
           notificationItem(
           text = "5 new users today", 
           icon("users") 
           ), 
           notificationItem(
           text = "12 items delivered", 
           icon("truck"), 
           status = "success" 
           ), 
           notificationItem(
           text = "Server load at 86%", 
           icon = icon("exclamation-triangle"), 
           status = "warning" 
           ) 
       )    
), 
    dashboardSidebar(
    sidebarMenu(
     menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")), 
     menuItem("Widgets", tabName = "widgets", icon = icon("th")) 
    )), 

    dashboardBody(
    tabItems(
     # First tab content 
     tabItem(tabName = "dashboard", 
       h2("Graphes de suivi"), 
       fluidRow(
       box(title = "Graphiques", status = "primary", 
        plotOutput("plot1", height = 250), 
        plotOutput("plot2", height = 250) 
       ), 

       box(title= "Informations", status = "info", 
        "Texte descriptif", br(), "blablabla", 
        sliderInput("slider", "Number of observations:", 1, 100, 50), 
        sliderInput("slider2", "Curseur 2:", 1, 200, 25), 
        textInput("text", "Commentaire :") 
       ), 
       box(title = "Commentaires éventuels", status="success", 
        solidHeader = TRUE, 
        collapsible = TRUE, 
        "Commentaire :", 
        textOutput("text") 
       ) 
      ) 
    ), 
     # Second tab content 
     tabItem(tabName = "widgets", 
       h2("Widgets tab*** content") 
    ) 
    ) 
) 
) 

server <- function(input, output) { 
    set.seed(122) 
    histdata <- rnorm(500) 
    output$text <- renderText({ 
    print(input$text) 
    }) 
    output$plot1 <- renderPlot({ 
    data <- histdata[seq_len(input$slider)] 
    hist(data) 
    }) 
    output$plot2 <- renderPlot({ 
    data2 <- histdata[seq_len(input$slider2)] 
    hist(data2) 
    }) 
    output$messageMenu <- renderMenu({ 
    req(messageData, cancelOutput = TRUE) 
    msgs <- apply(messageData, 1, function(row) { 
     messageItem(from = row[["from"]], message = row[["message"]]) 
    }) 
    dropdownMenu(type = "messages", .list = msgs) 
    }) 
} 

shinyApp(ui, server) 
+0

おかげで、私はこの1つで私のMessageDataを交換し、どちらも正しい種類のを生成するように見えますデータフレーム。とにかく、私は同じエラーが発生しました:/ – AUB

+0

あなたのコードの行を入力することは、私のために正しく動作します。あなたが最後にコードブロックでは、間違った場所にいくつかの括弧があります。私の更新された答えを見てください。 – Lespied

+0

私のコードを修正していただきありがとうございます!しかし、私はまだ同じエラーを取得...? – AUB

0

問題は、次の行にあります。

messageData<-data.frame(from = character(), message = character()) 

output$messageMenu <- renderMenu({ 
    msgs <- apply(messageData, 1, function(row) { 
     messageItem(from = row[["from"]], message = row[["message"]]) 
     dropdownMenu(type = "messages", .list = msgs) 
    }) 
    }) 

あなたは存在しないものを選択しようとしています。だから、あなたには、いくつかのデータを使用したmeesageDataを移入し、次のようにそれを下に移動することによって、あなたのコードの行を変更する必要があります。ご入力のための

output$messageMenu <- renderMenu({ 
     msgs <- apply(messageData, 1, function(row) { 
      messageItem(from = row[["from"]], message = row[["message"]]) 

     }) 
     dropdownMenu(type = "messages", .list = msgs) 
     }) 
+0

あなたは私のコードを忠実に訂正し、同じアドバイスをくれました。しかし、私はまだ閉じウィンドウと同じエラーメッセージが... – AUB

関連する問題