0

我希望能够将函数应用于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)
4

1 回答 1

2

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

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

其次,您在使用时只给出lapply列的名称,而不是数据input$pick_col1,因此您的清理功能无济于事。使用selectfromdplyr提供了一种简单的方法来命名列并获取数据。

最后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)
于 2020-01-17T19:16:26.637 回答