【问题标题】:Read output from `verbatimTextOutput` into a data frame in Shiny将“verbatimTextOutput”的输出读入 Shiny 中的数据框
【发布时间】:2021-11-21 11:28:36
【问题描述】:

如何将verbatimTextOutput 的输出读入数据框。

我希望能够从提交按钮获取一个值(这里我刚刚使用rnorm 作为提交按钮运行的函数),然后通过按“添加”将这个计算值读入数据框中.

我的想法是将输出保存到数据框中,然后显示该数据框。但是出了点问题,我不确定是什么。

例如:

library(shiny)
library(shinydashboard)

df <- NULL

ui <- dashboardPage(
  header = dashboardHeader(title = "Test"),
  
  sidebar = dashboardSidebar(),
  
  dashboardBody(
    fluidRow(
      column(12,
             numericInput(inputId = "mean", label = "Number:", value = 4),
             submitButton(text = "Apply Changes"),
             verbatimTextOutput("value_no"),
             actionButton("add", "Add"),
             tableOutput("table")
      )) # close column, fluid row
  ) # close body
)

server <- function(input, output) {
  
  output$value_no <- renderText({
    rnorm(n = 1, mean = input$mean)
  })
  
  Data = reactive({
    if (input$add > 0) {
      df <- data.frame(rbind(df, x=output$value_no))
      return(list(df=df))
    }
  })
  
  output$table <- renderTable({
    data.frame(Data()$df)
  }, 'sanitize.text.function' = function(x){x}
  )
}

shinyApp(ui, server)

如何将verbatimTextOutput 对象的输出读入数据框?

非常感谢。

【问题讨论】:

  • 你想用data.frame做什么?显示吗?保存吗?

标签: r shiny


【解决方案1】:

对您的 UI 和服务器逻辑稍作修改。主要的变化是给verbatimTextOutput 的值的响应式getter。然后可以更轻松地在其他地方使用它。还更改了“添加”和“应用更改”的顺序。

评论后编辑:为了让数据在按钮点击时发生变化,我们将 reactiveValues 与 observeEvent 结合起来。后者将观察按钮点击,而前者使data.frame 可修改。

library(shiny)
library(shinydashboard)
# Make df modifiable
df <- reactiveValues(data=data.frame(y=NULL))
ui <- dashboardPage(
  header = dashboardHeader(title = "Test"),
  
  sidebar = dashboardSidebar(),
  
  dashboardBody(
    fluidRow(
      column(12,
             numericInput(inputId = "mean", label = "Number:", value = 4),
             verbatimTextOutput("value_no"),
             actionButton("add", "Add"),
             submitButton(text = "Apply Changes"),
             tableOutput("table")
      )) # close column, fluid row
  ) # close body
)

server <- function(input, output) {
  
  rnorm_gen <- reactive(
    rnorm(n = 1, mean = input$mean)
    
  )
  output$value_no <- renderText({
    rnorm_gen()
  })


output$table<-renderTable(df$data)
# observe button click, rbind based on condition
observeEvent(input$add,
               {
               
                 if (input$add > 0) {
                
                  df$data <- rbind(df$data, rnorm_gen())
                 }
               })

}

shinyApp(ui, server)

【讨论】:

  • 这真的很有用,谢谢!但是,有没有办法做到这一点,每当我单击“添加”时,该值就会添加到数据框df。目前,自 y = NULL 以来,新值相互覆盖。
  • 已编辑,请查看以上@LilyClements
猜你喜欢
  • 2020-02-15
  • 1970-01-01
  • 1970-01-01
  • 2018-04-03
  • 2021-05-08
  • 1970-01-01
  • 1970-01-01
  • 2014-06-16
  • 2017-12-25
相关资源
最近更新 更多