0

我想通过在 R Shiny 中使用 selectInput 来选择列名来删除列。为此,我构建了函数“removecolumn”,该函数将“nameofthecolumn”作为参数并删除指定的列。我使用 observeEvent 在服务器代码中调用该函数,但它不起作用并给我以下错误。

有人可以帮助我解决这个问题,并指出我可以学习如何将动态列名调用到任何服务器函数中的任何资源吗?

错误

警告:removecolumn 中的错误:未使用的参数 (input$selectcolumn)

csv数据

ID  Type   Range
21  A1 B1   100
22  C1 D1   200
23  E1 F1   300

代码概述 基本上,代码接受 CSV 文件作为输入,根据问题,我在应用程序中使用“SplitColumns”和“删除行”和“替换值”按钮,但是,我想添加现在另一个名为“删除列”的按钮。

应用程序.R

library(shiny)
library(reshape2)
#source('splitColumn_stack.R')
library(DT)
library(tibble)


###function for deleting the rows
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
}
###_______________________________________________
### function for inserting a new column

fillvalues <- function(data, values, columName){
  df_fill <- data
  vec <- strsplit(values, ",")[[1]]
  df_fill <- tibble::add_column(df_fill, newcolumn = vec, .after = columName)
  df_fill
}

##function for removing the colum
removecolumn <- function(nameofthecolumn){
  df[ , -which(names(df) %in% nameofthecolumn)]
  
}

### use a_splitme.csv for testing this program

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      fileInput("file1", "Choose CSV File", accept = ".csv"),
      checkboxInput("header", "Header", TRUE),
      actionButton("Splitcolumn", "SplitColumn"),
      selectInput(inputId='selectcolumn', label='select column', ''),
      actionButton("deleteRows", "Delete Rows"),
      textInput("textbox", label="Input the value to replace:"),
      actionButton("replacevalues", label = 'Replace values'),
      actionButton("removecolumn", "Remove Column")
    ),
    mainPanel(
      DTOutput("table1")
    )
  )
)

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))
    
  })
  
  observeEvent(input$Splitcolumn, {
    rv$data <- splitColumn(rv$data, input$selectcolumn)
  })
  
  observeEvent(input$deleteRows,{
    if (!is.null(input$table1_rows_selected)) {
      rv$data <- rv$data[-as.numeric(input$table1_rows_selected),]
    }
  })
  
  output$table1 <- renderDT({
    rv$data
  })
  observeEvent(input$replacevalues, {
    rv$data <- fillvalues(rv$data, input$textbox, input$selectcolumn)
  })
  observeEvent(input$removecolumn, {
    rv$data <- removecolumn(rv$data,input$selectcolumn)
  })
}

shinyApp(ui, server)
4

1 回答 1

2

您忘记了函数df中的参数removecolumn

##function for removing the column
removecolumn <- function(df, nameofthecolumn){
  df[ , -which(names(df) %in% nameofthecolumn)]
}
于 2021-08-19T13:02:15.910 回答