首页 > 解决方案 > 如何将输出对象中的值作为输入提供给另一个输出对象?

问题描述

我正在开发一个基于模拟的应用程序。我有 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)样本(c(0,1),长度(比例_i),替换=真,概率=这些取概率值

理想情况下,我希望将这一切都放在一个数据框中,其中我有记录所属比例括号的列以及它们是 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)

标签: rshiny

解决方案


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

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

BR塞巴斯蒂安


推荐阅读