3

datatable からフィルタリングされたデータを使用して、ggplot を作成したいと思います。2 つのウィジェットも実装しました。データテーブルをフィルタリングした後、ユーザーは表示する x 軸と y 軸を選択できます。ウィジェットなどを設定した後、エラーが発生しました:

Error in `[.data.frame`(data_melt, filtered_data) : undefined columns selected

なぜこれが起こったのかわかりません。

私のデータ例:

              Rundheit      Diff Charge  Ord..Nr.      Block.Nr. 
1               0.24        0.20 754331      738         1                             
2               0.26        0.21 783345      738         2          
3               0.25        0.15 795656      738         3          
4               NA          0.14 798431      738         4          
5               NA          0.12 799651      738         5          
6               0.24        NA   805454      738         6      

NA値は私のデータにとどまる必要があります

UI:

ui <-  dashboardPage(
  dashboardHeader(title = "WW"),
  dashboardSidebar(
    selectizeInput(inputId = "yaxis", 
                   label = "Y-axis (Diagramm)",
                   choices = list("Rundheit" = "Rundheit",
                                  "Diff" = "Diff"), 
                   selected = c("Rundheit"), multiple=TRUE),
    selectInput(inputId = "xaxis", 
                label = "X-axis (Diagramm)",
                choices = names(data_melt), 
                selected = "Block.Nr.")
  ),
  dashboardBody(
    fluidRow(
      tabBox(status = "primary", width = NULL, height = "1000px", 
        tabPanel(title="Tabelle filtern", div(style = 'overflow-y: scroll; max-height: 950px; position:relative;', 
                                                                 dataTableOutput("tabelle"))),
                    tabPanel("Diagramm", plotOutput("plot1")),
                    tabPanel("Histogramm", plotOutput("plot2"))))
  ))    

サーバ:

      server <-  function(input, output, session) {

    output$tabelle <- renderDataTable({    
    datatable(data[, c("Rundheit", "Diff", "Charge.", "Ord..Nr.", "Block.Nr.")], class = 'cell-border stripe', 
                       rownames=FALSE, filter="top", 
options = list(lengthChange = FALSE, columnDefs = list(list(width = '200px', targets = "_all"), list(bSortable = FALSE, targets = "_all"))), callback=JS("
                   //hide column filters for two columns
                    $.each([0, 1], function(i, v) {
                    $('input.form-control').eq(v).hide()});", 
                    "var tips = ['Rundheit', 'Diff', 'Charge',
                    'Ord..Nr.', 'Block.Nr.'],
                    header = table.columns().header();
                    for (var i = 0; i < tips.length; i++) {
                    $(header[i]).attr('title', tips[i]);}")) %>%
                formatStyle("Rundheit",  color = 'red', backgroundColor = 'lightyellow', fontWeight = 'bold')
    })

    output$plot1 <- renderPlot({
                filtered_data <- input$tabelle_rows_all
                data_filt <- data_melt[filtered_data]    


            ggplot(data=data_filt, aes_string(x = input$xaxis, y = input$yaxis), environment = environment())+ geom_line(aes(group=1), size=1) +
                        theme(axis.text.y=element_text(size=15), axis.text.x=element_text(size=15), axis.title.x = element_text(size=18, face="bold"),axis.title.y = element_text(size=18, face="bold"))
             })
}


shinyApp(ui = ui, server = server)

なぜそれが機能しないのか、そして列を定義する方法を知っている人はいますか?

投稿を見ました:http://stackoverflow.com/questions/30042456/using-filtered-datatables-in-shiny

ただし、コードの場合:

[filtered_data, "name of the column"]

たとえば、次のように使用しても機能しません。

data_filt <- data_melt[filtered_data, ]

Error in seq.int(0, to0 - from, by) : 'to' cannot be NA, NaN or infinite

Error in seq.default(from = best$lmin, to = best$lmax, by = best$lstep) : 
  'from' must be of length 1

としても:

data_filt <- data_melt[filtered_data, input$xaxis]

エラーが発生します(列のタイプによって異なります):

Error : ggplot2 doesn't know how to deal with data of class factor
Error : ggplot2 doesn't know how to deal with data of class numeric

そして、私input$yaxisも実装する必要があります...したがって、私は試しました:

data_filt <- data_melt[filtered_data, c(input$xaxis, input$yaxis)]

エラーが発生しました

Error in seq.default(from = best$lmin, to = best$lmax, by = best$lstep) : 
  'from' must be of length 1

このコードで少し遊んだ情報だけで、列の名前を指定してもエラーがスローされ、複数指定することさえできません

私は次のようなことを試しました:

[filtered_data, "Rundheit")

[filtered_data, c("Rundheit", "Diff")]

アイデアをありがとうございました

4

1 に答える 1