【问题标题】:using pickerInput in r shiny to apply function在 r shiny 中使用 pickerInput 来应用函数
【发布时间】:2020-05-02 16:47:01
【问题描述】:

我希望能够将函数应用于RLdata10000 数据集中的一组给定列。我一直在学习闪亮的教程,并试图学习如何使用observeEventactionButton。但是,我希望能够选择我使用的列,所以我遇到了pickerInput。简而言之,我希望能够从RLdata10000 中选择一组列,并通过actionButton 应用该功能。

我的问题是我收到一个错误:Error: unused argument (RLdata10000)。我的代码如下。我希望最终能够使用两个数据文件来做到这一点。任何帮助将不胜感激。

library(shiny)
library(DT)
library(shinyWidgets)
library(plyr)
library(dplyr)
library(RecordLinkage)

data(RLdata10000)

cleanup <- function(x){
  x <- as.character(x) # convert to character
  x <- tolower(x) # make all lowercase
  x <- trimws(x, "both") # trim white space
  return(x)
}

ui <- basicPage(
  h2("Record Linkage Data"),
  actionButton(inputId = "clean", label = "Clean Data")
  pickerInput(width = "75%",
  inputId = "pick_col1",
  label = "Select columns to display",
  choices = colnames(RLdata10000),
  selected = colnames(RLdata10000),
  options = list(
    `actions-box` = T,
    `selected-text-format` = paste("count > ", length(colnames(RLdata10000)) - 1),
  `count-selected-text` = "Alle",
  liveSearch = T,
  liveSearchPlaceholder = T
),

multiple = T)
  DT::dataTableOutput("mytable")
)

server <- function(input, output) {
  observeEvent(input$clean, {
  output$mytable = DT::renderDataTable({
    lapply(input$pick_col1, cleanup)
  })
 }
}
shinyApp(ui, server)

【问题讨论】:

    标签: r shiny shinywidgets pickerinput


    【解决方案1】:

    我实际上无法复制您提到的错误,但您遇到了一些问题,导致您无法获得(我认为)您想要的东西。

    首先,您在 UI 中 actionButtonpickerInput 元素之后缺少逗号。

    第二,当您使用input$pick_col1 时,您只给lapply 列的名称而不是数据,因此您的清理功能没有任何作用。使用 dplyr 中的 select 提供了一种简单的方法来命名列并获取数据。

    最后renderDataTable 想要一个表格格式作为输入(即,数据框或矩阵),但lapply 生成一个列表。您需要将lapply 的输出转换为可工作的类。

    通过这三个更改,更新后的代码如下所示:

    library(shiny)
    library(DT)
    library(shinyWidgets)
    library(plyr)
    library(dplyr)
    library(RecordLinkage)
    
    data(RLdata10000)
    
    cleanup <- function(x){
      x <- as.character(x) # convert to character
      x <- tolower(x) # make all lowercase
      x <- trimws(x, "both") # trim white space
      return(x)
    }
    
    ui <- basicPage(
      h2("Record Linkage Data"),
      actionButton(inputId = "clean", label = "Clean Data"),
      pickerInput(width = "75%",
                  inputId = "pick_col1",
                  label = "Select columns to display",
                  choices = colnames(RLdata10000),
                  selected = colnames(RLdata10000),
                  options = list(
                    `actions-box` = T,
                    `selected-text-format` = paste("count > ", length(colnames(RLdata10000)) - 1),
                    `count-selected-text` = "Alle",
                    liveSearch = T,
                    liveSearchPlaceholder = T
                  ),
    
                  multiple = T),
      DT::dataTableOutput("mytable")
    )
    
    server <- function(input, output) {
      observeEvent(input$clean, {
        output$mytable = DT::renderDataTable({
          data.frame(lapply(select(RLdata10000, input$pick_col1), cleanup))
        })
      })
    }
    
    shinyApp(ui, server)
    

    【讨论】:

    • 这真的很棒而且很有帮助。感谢您如此清楚地列出我的失误。
    猜你喜欢
    • 2019-12-26
    • 2019-08-18
    • 2019-02-12
    • 1970-01-01
    • 2023-02-13
    • 2018-11-09
    • 1970-01-01
    • 2018-06-23
    • 2020-08-20
    相关资源
    最近更新 更多