【问题标题】:How to feed a value from an output object as an input into another output object?如何将输出对象中的值作为输入提供给另一个输出对象?
【发布时间】:2020-02-18 04:15:51
【问题描述】:

我正在开发一个基于模拟的应用程序。我有 2 个初始数字输入对象,“max imp count”和“population size”。根据输入这些数字输入对象的内容,应用程序生成另外 2 个输入对象(实际上作为输出对象)-“select_proportion”和“select_probability”。如果“max imp count”为 3,则应用程序应生成 8 个新输入对象 - 4 个请求比例(proportion0、proportion1、proportion2、proportion3),其中 4 个请求probability0、probability1、probability2 和probability3。我想将这些比例和概率值输入以下列方式工作的示例函数:

1) sample(c(0,input$max_imp, 1), size=input$population, replace=TRUE, prob= 这些取比例值

所有比例括号的二进制值示例:
2) sample(c(0,1), length(proportion_i), replace=TRUE, prob=这些取概率值)

理想情况下,我希望将所有这些都放在一个数据框中,在该数据框中,我有记录所属比例括号的列以及它们是 0 还是 1。

代码:

library(shiny)
library(shinydashboard)

ui <- dashboardPage(
  dashboardHeader(title = "Simulation"),
  dashboardSidebar(
    sidebarMenu(
      numericInput("max_imp", "max imp count", 0, min = 0, max = 15, step = 1),
      numericInput("population", "population size", 1, min = 0, max = 100000, step = 1),
      menuItemOutput("menuitem")
    )
  ),
  dashboardBody(
    uiOutput("select_proportion"),
    uiOutput("select_probability")
  ))


server <- function(input, output) {

    output$select_proportion = renderUI(
      lapply(0:(input$max_imp), function(i){
      numericInput(inputId = "i1", label = paste0("proportion",i), 0, min = 0, max = 1, step = 0.05)}))

    output$select_probability = renderUI(
    lapply(0:(input$max_imp), function(i){
      numericInput(inputId = "i2", label = paste0("probability",i), 0, min = 0, max = 1, step = 0.05)}))

}

# Run the application
shinyApp(ui = ui, server = server)

【问题讨论】:

  • 那么问题是什么?
  • 我想将 output$select_proportion 中的值作为向量传递给示例函数中的 prob 参数。这将如何实施?
  • 将值存储在reactive 表达式中,以便您可以在任意数量的输出中使用它们

标签: r shiny


【解决方案1】:

您的输出元素只是 UI 容器,然后填充了在 renderUI 函数中定义的输入元素。您可以像使用其他输入一样轻松访问这些输入元素的值。

这里唯一的事情是您必须以动态方式设置输入的 ID,例如第二个输入使用id = paste("input", i, "2", sep = "-") 而不是id = "i2"。这将为您创建input$max_imp + 1 不同的输入。然后可以通过input$input_1_2 访问这些值。

BR 塞巴斯蒂安

【讨论】:

  • 谢谢!我将第二个输入的 ID 添加为 id=paste("input, i, "prop", sep="-")。我现在想选择输入对象中名称中包含“prop”的所有列。我试过input[, grepl("prop", names(input)]。这似乎不起作用。你知道为什么吗?
  • 变量input 是一个反应变量。您必须首先将其重新格式化为一个列表:input_list &lt;- reactiveValuesToList(input),然后您可以使用您的 grepl 命令选择所需的元素。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-03
  • 2016-04-13
  • 1970-01-01
相关资源
最近更新 更多