Я на самом деле не смог воспроизвести ошибку, которую вы отметили, но у вас было несколько проблем, которые мешали вам получить то, что (я думаю) вы ищете.
Первый вы пропустили запятые в пользовательском интерфейсе после элементов actionButton
и pickerInput
.
Второй , вы даете lapply
имена столбцов, а не данные - когда вы используете input$pick_col1
, ваша функция очистки не имеет над чем работать. Использование select
из dplyr
обеспечивает простой способ присвоения имен столбцам и получения данных.
Last , 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)