簡體   English   中英

重新調整閃亮的反應變量

[英]relevel a reactive variable in shiny

我想使用閃亮來讀取 CSV 文件,然后允許用戶能夠在該文件的特定列中選擇參考級別。 想象一下這樣的數據:

mydata <- data.frame(letter = rep(letters[1:3], 3), num = 1:9)
write.csv(mydata, "mydata.csv", row.names = FALSE)

這是我的代碼:

library(shiny)
ui <- fluidPage(
  fileInput(
    "file",
    label = "File Input",
    accept = ".csv"
  ),
  selectInput(
    inputId = "ref",
    label = "Reference Outcome",
    choices = NULL
  ),
  actionButton( inputId = "action",
                label = "action"),
  textOutput("text")
)

server <- function(input, output, session) {
  observe({
    updateSelectInput(session,
                      "ref",
                      choices = unique(data()[,1]))
  })

  data <- reactive({
    inFile <- req(input$file)
    fileinput <- read.csv(inFile$datapath, header = TRUE, stringsAsFactors = FALSE)
    return(fileinput)
  })
  
  observeEvent(input$action,{
    data()$letter <- factor(data()$letter)
    data()$letter <- relevel(data()$letter, ref = input$ref)
    output$text <- renderText({
      paste("Your reference level is: ", levels(data()$letter)[1])
    }) 
  })  
}
shinyApp(ui, server)

我收到此錯誤:

Warning: Error in <-: invalid (NULL) left side of assignment
  [No stack trace available]

我知道您不應該在賦值左側使用反應變量,但是在將數據作為反應變量導入后如何重新調整數據?

嘗試這個

server <- function(input, output, session) {
  rv <- reactiveValues(df=NULL)
  observe({
    updateSelectInput(session,
                      "ref",
                      choices = unique(data()[,1]))
  })
  
  data <- reactive({
    inFile <- req(input$file)
    fileinput <- read.csv(inFile$datapath, header = TRUE, stringsAsFactors = FALSE)
    return(fileinput)
  })
  
  observeEvent(input$action,{
    rv$df <- data()
    rv$df$letter <- factor(rv$df$letter)
    rv$df$letter <- relevel(rv$df$letter, ref = input$ref)
    output$text <- renderText({
      paste("Your reference level is: ", levels(rv$df$letter)[1])
    }) 
  })  
}

這是幾乎相同的答案,只是每次單擊操作按鈕時數據框值都不會更新。 它僅在文件上傳時更新。

library(shiny)

mydata <- data.frame(letter = rep(letters[1:3], 3), num = 1:9)
write.csv(mydata, "mydata.csv", row.names = FALSE)
  
  
ui <- fluidPage(
  fileInput(
    "file",
    label = "File Input",
    accept = ".csv"
  ),
  selectInput(
    inputId = "ref",
    label = "Reference Outcome",
    choices = NULL
  ),
  actionButton( inputId = "action",
                label = "action"),
  textOutput("text")
)

server <- function(input, output, session) {
  observe({
    updateSelectInput(session,
                      "ref",
                      choices = unique(data()[,1]))
  })
  
  data <- reactive({
    inFile <- req(input$file)
    fileinput <- read.csv(inFile$datapath, header = TRUE, stringsAsFactors = FALSE)
    r$df <- fileinput
  })
  
  r <- reactiveValues(
    df = NULL
  )

  observeEvent(input$action,{
    r$df$letter <- factor(r$df$letter)
    r$df$letter <- relevel(r$df$letter, ref = input$ref)
    output$text <- renderText({
      paste("Your reference level is: ", levels(r$df$letter)[1])
    }) 
  })  
}
shinyApp(ui, server)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM