【问题标题】:update value in a column of a table based on input in shiny根据闪亮的输入更新表列中的值
【发布时间】:2021-04-18 01:34:53
【问题描述】:

我是 Shiny 的新手,我需要你的知识。我将尝试详细解释:

在我的应用程序中,用户上传了一个 csv 文件。此信息在 2 tabPanel 中可视化。在名为 Original 的第一个 tabPanel 中,用户可以看到原始数据集。另一个名为 Procesado,用户可以看到一个选择输入,其值从 1 到 4,并且只有 2 列(在内部显示信息之前,数据集被编辑,删除了列和行)。

每次用户更改选择输入中的值时,我都想更新第一列的值。我尝试使用 renderUI 和响应式,但不工作。谢谢

shinyUI(
  pageWithSidebar(
    headerPanel("Ciclismo - Calidad de la sesion"),
    sidebarPanel(
      p("Escoge el dataset generado por la aplicacion de ciclismo Polar"),
      fileInput("file1","Escoge un archivo CSV",
                multiple = FALSE,
                accept = c(".csv")),
      tags$hr(),
      
      submitButton("Evaluar Dataset")
      ),
    mainPanel(
      tabsetPanel(
        tabPanel("Original", tableOutput("contents")),
        tabPanel("Procesado", 
                 p("Selecciona la zona de entrenamiento a evaluar"),
                 selectInput("zone", "Zona de entrenamiento",
                            choices = c("1", "2", "3", "4")),
                 uiOutput("ui"),
                 tags$hr(),
                 tableOutput("modified"),),
        tabPanel("Graficos",
                  h3(textOutput("output_text")),
                  plotOutput("output_plot")
                 )
       
      )
    )
  )
)

服务器上的代码是

shinyServer(function(input, output) {
  
  output$contents <- renderTable({
    #data.frame(x=auto)
    req(input$file1)
    # when reading semicolon separated files,
    # having a comma separator causes `read.csv` to error
    #tryCatch(
      #{
        df <- read.csv(input$file1$datapath)
      #},
      #error = function(e) {
        # return a safeError if a parsing error occurs
       # stop(safeError(e))
     # }
    #)
    return(df)
  })
  
  output$ui <- renderUI({
    switch(input$zone, 
            "1" = cbind(ZONA = 1, dfProc),
            "2" = cbind(ZONA = 2, dfProc),
            "3" = cbind(ZONA = 3, dfProc),
            "4" = cbind(ZONA = 4, dfProc))
  })
    
  
  output$modified <- renderTable({
    req(input$file1)
    dff <- read.csv(input$file1$datapath)
    #return(df)
    
    dfN = dff[-c(1,2,3),-c(1,2)]
    FC = dfN[,-c(2:26)]
    #Se convierte en dataframe para realizar operaciones
    dfProc = data.frame(FC)
    
    newdata_test = cbind(ZONA = 1,dfProc)
    return(newdata_test)
  })
  
  
})

【问题讨论】:

    标签: shiny-reactivity


    【解决方案1】:

    终于,我做到了。

    我放了两个eventReactive。第一个是读取 CSV 文件。第二个输入 Zona 使用 cbind 函数在列中插入输入值。我希望这个答案可以对其他人有所帮助

    df <- eventReactive(input$csv,{
        req(input$csv)
        dff <- read.csv(input$csv$datapath)
        #The dataset is updated, eliminating rows and columns
        dfN = dff[-c(1,2,3),-c(1,2)]
        FC = dfN[,-c(2:26)]
        dfProc = data.frame(FC)
        return(dfProc)
      })
      
      datos <- eventReactive(input$zone,{
         newtable = cbind(input$zone, df())
       })
    
    
    output$modified <- renderTable({datos()}) 
    

    【讨论】:

      猜你喜欢
      • 2020-06-23
      • 1970-01-01
      • 2018-04-30
      • 2020-10-06
      • 1970-01-01
      • 2020-11-05
      • 2017-03-02
      • 1970-01-01
      • 2020-01-25
      相关资源
      最近更新 更多