【问题标题】:rendering through data table row selection - in Shiny通过数据表行选择呈现 - 在 Shiny
【发布时间】:2016-09-15 07:31:32
【问题描述】:

在我正在构建的闪亮应用程序中,我有两个数据帧,它们是主数据帧的子集,我通过数据表呈现数据。从this 示例中获取线索,我创建了两个数据表输出和一个文本输出。虽然数据表和文本输出呈现没有任何问题,但从第一个数据表获取输入的第二个数据表正在抛出错误。两个数据帧的可重现示例如下。第一个标记为df,第二个标记为dfa

df的可重现数据:

structure(list(MediaType = c("BILLBOARDS", "BILLBOARDS", "MALL FACADES", 
"BUS SHELTER", "WALL GRAPHICS"), Rental = c(62500, 160000, 240000, 
112000, 210000), Sizeinsq = c(800, 200, 200, 108, 400)), .Names = c("MediaType", 
"Rental", "Sizeinsq"), row.names = c("BrandA", "BrandB", "BrandC", 
"BrandD", "BrandE"), class = "data.frame")

第二个数据框dfa

structure(list(Client = c("BrandA", "BrandB", "BrandC", "BrandD", 
"BrandE"), MediaType = c("BILLBOARDS", "BILLBOARDS", "MALL FACADES", 
"BUS SHELTER", "WALL GRAPHICS"), Rental = c(62500, 160000, 240000, 
112000, 210000), Sizeinsq = c(800, 200, 200, 108, 400)), .Names = c("Client", 
"MediaType", "Rental", "Sizeinsq"), row.names = c(NA, 5L), class = "data.frame")

代码:

library(shiny)
runApp(list(
    ui = bootstrapPage(
        dataTableOutput("x1"), 
        verbatimTextOutput("t1"),
        dataTableOutput("x2")
    ),
    server = function(input, output){
        output$x1 = renderDataTable(
            df, server = TRUE, rownames = TRUE
        )

        output$t1 <- renderPrint({
            s <- input$x1_rows_selected
            if(length(s)){
                cat(s)
            }
        })

        output$x2 <- renderDataTable(
            s <- input$x1_rows_selected
            if(length(s)){
            k <- dfa[dfa$Client %in% s, ]
            k
            }
            )

    }
))

我收到括号错误或某些“args”不匹配错误。

第一个数据表和文本输出完美呈现,而第二个数据表则没有。我尝试了很多选项,例如在 renderDataTable 前面使用 DT(当然是在添加库(DT)之后)。我尝试将 verbatimTextOutput 转换为 textInput 并假设我可以使用此输入来呈现第二个数据表。我尝试使用 textOutput 选项并尝试取值。但似乎没有任何帮助。

本质上,我想根据第一个数据框的行名对第二个数据框进行子集化。

我的会话信息:

R version 3.2.0 (2015-04-16)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.10.3 (Yosemite)

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] htmltools_0.3        leaflet_1.0.0        data.table_1.9.4    
 [4] markdown_0.7.7       reshape2_1.4.1       lazyeval_0.1.10     
 [7] tidyr_0.3.1          zoo_1.7-12           shinyjs_0.6         
[10] shinyBS_0.61         shinydashboard_0.5.1 plotly_3.4.13       
[13] ggplot2_2.1.0        dplyr_0.4.3          DT_0.1              
[16] shiny_0.13.2         RMySQL_0.10.8        DBI_0.3.1           

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.3      plyr_1.8.3       base64enc_0.1-3  viridis_0.3.2   
 [5] tools_3.2.0      digest_0.6.9     jsonlite_0.9.19  gtable_0.1.2    
 [9] lattice_0.20-33  yaml_2.1.13      parallel_3.2.0   gridExtra_2.0.0 
[13] stringr_1.0.0    httr_1.1.0       htmlwidgets_0.5  grid_3.2.0      
[17] R6_2.1.2         magrittr_1.5     scales_0.3.0     assertthat_0.1  
[21] mime_0.4         xtable_1.7-4     colorspace_1.2-6 httpuv_1.3.3    
[25] stringi_1.0-1    miniUI_0.1.1     munsell_0.4.3    chron_2.3-47    

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    您忘记在这部分代码中添加{}

    output$x2 <- renderDataTable({ # added { 
          s <- input$x1_rows_selected
          if(length(s)){
            k <- dfa[dfa$Client %in% s, ]
            k
          }
        }) # added }
    

    完整代码:

    已编辑:我添加了库 DT


    df  <- structure(list(MediaType = c("BILLBOARDS", "BILLBOARDS", "MALL FACADES", 
                                        "BUS SHELTER", "WALL GRAPHICS"),
                          Rental = c(62500, 160000, 240000, 112000, 210000),
                          Sizeinsq = c(800, 200, 200, 108, 400)), 
                          .Names = c("MediaType", "Rental", "Sizeinsq"), 
                          row.names = c("BrandA", "BrandB", "BrandC", "BrandD", "BrandE"), 
                          class = "data.frame")
    
    
    dfa <- structure(list(Client = c("BrandA", "BrandB", "BrandC", "BrandD", "BrandE"), 
                          MediaType = c("BILLBOARDS", "BILLBOARDS", "MALL FACADES", 
                                        "BUS SHELTER", "WALL GRAPHICS"), 
                          Rental = c(62500, 160000, 240000, 112000, 210000), 
                          Sizeinsq = c(800, 200, 200, 108, 400)), 
                          .Names = c("Client", "MediaType", "Rental", "Sizeinsq"), 
                          row.names = c(NA, 5L), class = "data.frame")
    
    
    
    library(shiny)
    library(DT)
    runApp(list(
      ui = bootstrapPage(
        dataTableOutput("x1"), 
        verbatimTextOutput("t1"),
        dataTableOutput("x2")
      ),
      server = function(input, output){
        output$x1 = renderDataTable(
          df, server = TRUE, rownames = TRUE
        )
    
        output$t1 <- renderPrint({
          s <- input$x1_rows_selected
          if(length(s)){
            cat(s)
          }
        })
    
        output$x2 <- renderDataTable({ # added { 
          s <- input$x1_rows_selected
          if(length(s)){
            k <- dfa[dfa$Client %in% s, ]
            k
          }
        }) # added }
    
      }
    ))
    

    【讨论】:

    • 非常感谢。在我使用过的所有各种排列和组合中,我确信我确实使用了括号,但请注意它为什么不起作用。非常感谢,再次。这解决了我的问题。
    猜你喜欢
    • 1970-01-01
    • 2020-02-04
    • 2020-03-15
    • 1970-01-01
    • 2018-07-19
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多