#r #shiny
Вопрос:
В R shiny я использовал функцию selectInput, которая позволяет мне выбирать имена столбцов, такие как «Идентификатор» и «Тип», а также кнопку просмотра для загрузки csv-файла и кнопку «Разделить столбец», чтобы разъединить объединенные столбцы.
Что я хочу сделать, так это выбрать объединенный столбец в меню «Выбор», в данном примере «Тип», и запустить исходный код «SplitColumn.R» , чтобы удалить столбец и просмотреть результаты после загрузки csv-файла.
Вопрос
Я еще не получил никаких ошибок, но отключение работает без необходимости использовать кнопку «SplitColumn». Когда я выбираю опцию из самих опций, отключение работает.
Не мог бы кто-нибудь, пожалуйста, помочь мне с тем, чего мне не хватает в коде пользовательского интерфейса/сервера?
данные csv
ID Type Range
21 A1 B1 100
22 C1 D1 200
23 E1 F1 300
Разделительный столбец.R
splitColumn <- function(data, column_name) {
newColNames <- c("Unmerged_type1", "Unmerged_type2")
newCols <- colsplit(data[[column_name]], " ", newColNames)
after_merge <- cbind(data, newCols)
after_merge[[column_name]] <- NULL
after_merge
}
приложение.R
library(shiny)
source('splitColumn_stack.R')
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
fileInput("file1", "Choose CSV File", accept = ".csv"),
checkboxInput("header", "Header", TRUE),
actionButton("Splitcolumn", "SplitColumn"),
selectInput(inputId='selectcolumn', label='select column', choices=c('ID, Type'))
),
mainPanel(
tableOutput("contents")
)
)
)
server <- function(input, output) {
rv <- reactiveValues(data = NULL)
observe({
file <- input$file1
ext <- tools::file_ext(file$datapath)
req(file)
validate(need(ext == "csv", "Please upload a csv file"))
rv$data <- read.csv(file$datapath, header = input$header)
})
output$contents <- renderTable({
req(rv$data)
rv$data
})
# column_name <- dlg_input("Enter a number", Sys.info()["user"])$res
observeEvent(input$selectcolumn, {
rv$data <- splitColumn(rv$data, input$selectcolumn)
})
}
shinyApp(ui, server)
Ответ №1:
Попробуйте этот код —
library(shiny)
source('splitColumn_stack.R')
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
fileInput("file1", "Choose CSV File", accept = ".csv"),
checkboxInput("header", "Header", TRUE),
actionButton("Splitcolumn", "SplitColumn"),
selectInput(inputId='selectcolumn', label='select column', '')
),
mainPanel(
tableOutput("contents")
)
)
)
server <- function(session, input, output) {
rv <- reactiveValues(data = NULL)
observeEvent(input$file1, {
file <- input$file1
ext <- tools::file_ext(file$datapath)
req(file)
validate(need(ext == "csv", "Please upload a csv file"))
rv$data <- read.csv(file$datapath, header = input$header)
updateSelectInput(session, 'selectcolumn', 'select column', names(rv$data))
})
output$contents <- renderTable({
req(rv$data)
rv$data
})
observeEvent(input$Splitcolumn, {
rv$data <- splitColumn(rv$data, input$selectcolumn)
})
}
shinyApp(ui, server)