繁体   English   中英

如何在闪亮的反应数据中重复创建列?

[英]How to create column repeatedly in shiny reactive data?

我想在输入的csv文件中创建列,但是由于reactive的特性,我只能在输入文件中创建一个新列。

这是我的代码。

 library(shiny)
library(rlang)
library(dplyr)
    
    ui <- fluidPage(
  fileInput("file","csv file", accept = c(".csv")),
  textInput("name","Variable name"),
  selectInput("sel","Variable selection", choices = colnames(file), multiple = T),
  actionButton("go","Go"),
  actionButton("mean","Mean"),
  dataTableOutput("DF")
)


server <- function(input, output, session) {
 
  appdata <- reactive({
    read.csv(input$file$datapath, header=TRUE, stringsAsFactors = FALSE, sep = ",",
             fileEncoding = "euc-kr") 
  })

  
  
  observeEvent(input$file,{
    
    output$DF <- renderDataTable({
      appdata()
    })
    updateSelectInput(session, "sel", label = "Variable", choices = colnames(appdata()))
  })
  
  
  observeEvent(input$mean,{
    rv <- reactiveValues(data=NULL)
    rv$data <- appdata()
    
    df <- eventReactive(input$mean,{
      req(input$mean, input$sel, input$name)
      var_name <- input$name
      mydf <- rv$data
      new_var <- mydf %>% transmute(!!var_name := rowMeans(select(., input$sel)))
      rv$data <- cbind(mydf, new_var)
    })
    output$DF <- renderDataTable({
      df()
      })
  })
      
 
}

shinyApp(ui, server)

如您所见, appdatareactive ,我将其放入闪亮的服务器中。 这就是为什么我不禁将rv$data <- appdata()放入observeEvent()

有没有办法在反应数据中创建新列? 提前致谢。

尝试 :

library(shiny)
library(rlang)
library(dplyr)

ui <- fluidPage(
  fileInput("file","csv file", accept = c(".csv")),
  textInput("name","Variable name"),
  selectInput("sel","Variable selection", choices = colnames(file), multiple = T),
  actionButton("go","Go"),
  actionButton("mean","Mean"),
  dataTableOutput("DF")
)


server <- function(input, output, session) {
  rv <- reactiveValues(data=NULL)

  observeEvent(input$file,{
    rv$data <- read.csv(input$file$datapath, header=TRUE, stringsAsFactors = FALSE, sep = ",",
                        fileEncoding = "euc-kr") 
    output$DF <- renderDataTable({
      rv$data
    })
    updateSelectInput(session, "sel", label = "Variable", choices = colnames(rv$data))
  })

observeEvent(input$mean,{
    
      req(input$mean, input$sel, input$name)
      var_name <- input$name
      new_var <- rv$data %>% transmute(!!var_name := rowMeans(select(., input$sel)))
      cat('Add ',var_name,'\n')
      rv$data <- cbind(rv$data, new_var)
      
      output$DF <- renderDataTable({
        cat('update \n')    
        rv$data
      })
    })

}

shinyApp(ui, server)

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM