有人可以为我推荐R-Shiny中“ Track change”的良好教程吗?

时间:2019-07-09 06:39:03

标签: r shiny

两天前,我遇到了有关Shiny曲目更改的采访问题。我对这个词并不熟悉。在excel中,我们可以在任何行中编辑实体,也可以保存它。在ShinyUI中,当我们显示某些数据时,是否有任何规定可以在显示器本身(Shiny table)中修改数字或文本并可以将其保存在同一显示器中?另外,我还将有一个历史记录,说明以前的值是什么以及变更的值是什么。

我需要了解更多有关此主题的信息,请引导我获取一些有关Shiny Track-Change的良好教程链接。enter image description here

面试官告诉我,它在Shiny中称为“ Track Change”。我搜索了google,但找不到相同的令人满意的教程。

我有一个演示闪亮的应用程序[How to edit an uploaded data in rshiny,可以在其中查看加载的数据。检查图像。在Shiny中,我需要在UIServer中进行什么更改才能具有轨道更改之类的可编辑性?

library(shiny)
library(readxl)

ui = fluidPage( 

  titlePanel("HEllo world"),
  sidebarLayout(
    sidebarPanel(

      fileInput('file1', 'Choose xlsx file',
                accept = c(".xlsx")),
      actionButton("go", "update"),
      numericInput('NewVal', 'Enter new Frequency',NULL),
      numericInput('NewExp', 'Enter new Exposure',NULL),

      # Download button (goes with download handler below)
      # Use if desire is to save at press of button
      downloadButton("save", "Download")
    ),

    mainPanel(
      textInput('ID', 'Enter ID'),
      dataTableOutput('contents')
    )
  )
)

server = function(input,output){
  # Reactive value to save input data frame for use elsewhere
  original <- reactiveValues()

  observeEvent(input$file1, {
    theFile <- input$file1
    if(is.null(theFile)) {
      original$oldData <- NULL
    } else {
      original$oldData <- read_excel(theFile$datapath, 1)      
    }
  })

  observeEvent(input$go, {

    original$newData <- original$oldData
    if(input$ID !="") {
      for(i in 1:nrow(original$oldData)){

        if(input$ID == original$oldData$'ID'[i]){

          if(!is.na(input$NewVal)){
            original$newData$'Frequency'[i] <- input$NewVal
          }

          if(!is.na(input$NewExp)){
            original$newData$'Exposure'[i] <- input$NewExp
          }
          original$newData$'Value'[i] <- (original$newData$'Exposure'[i]*
                                            original$newData$'Frequency'[i])
        }
      }

      original$oldData<-original$newData  
    }

  })

  output$contents <- renderDataTable({
    if(!is.null(original$newData)) {
      original$newData}
    else {
      original$oldData
    }
  })

  ### Use this code below if desired saving is through download button
  # Server code for download button
  output$save <- downloadHandler(
    filename = function() {
      paste0("newData - ", Sys.Date(), ".csv")
    },

    content = function(con) {
      if (!is.null(original$newData)) {
        dataSave <- original$newData
      } else {
        dataSave <- original$oldData
      }
      con <- ## Desired save location... could just use `getwd()` to
        # save to working directory
        write.csv(dataSave, con)
    }
  )

}


shinyApp(ui = ui, server = server)

我需要学习更多有关此主题的信息,请通过“ Shiny Track-Change”的一些不错的教程链接来指导我。

0 个答案:

没有答案