簡體   English   中英

動態創建和用戶輸入框閃亮

[英]Dynamically Create and User Input Boxes Shiny

我正在嘗試使用動態響應式UI創建閃亮的用戶界面。

用戶基本上必須輸入實驗的變體數量(1-10)。

對於每個變體,用戶需要在文本框中輸入變體名稱,並且還要按比例1 - 100分配給每個變體。 所有變體的比例總和應該增加到100。

例如,用戶選擇5種變體。 然后,對於每個變體1-5,用戶應該獲得下拉選擇比例。

  • 變量1比例(1-100),用戶選擇40個說
  • 變量2比例(1-60),用戶選擇10個說
  • 變量3比例(1-50),用戶選擇35說
  • 變量4比例(1-15),用戶選擇10個說
  • 變量5比例(5),用戶在分配時沒有發言權 - 比例被退回為100 - (v1 + v2 + v3 + v4)= 5

我從這里借用代碼開始這個: 生成動態/多輸入框以根據Shiny R中的用戶選擇收集數據

ui.R

library(shiny)

shinyUI(pageWithSidebar (

  headerPanel( "Portfolio Returns"),

  sidebarPanel(
    numericInput("assets", label = "Enter Number of variants in Experiment", value="1"),
    uiOutput("variants")
  ),
  mainPanel()
))

Server.R

library(shiny)

shinyServer( function(input, output, session) {

  output$variants <- renderUI({
    numAssets <- as.integer(input$assets)

    lapply(1:numAssets, function(i) {
      list(tags$p(tags$u(h4(paste0("Variant ", i, ":")))),
           textInput(paste0("variant", i), label = "Variant Name", value = paste0("Variant ", i, " name..."))
           , numericInput(paste0("weight", i)
                          , label = "Proportion allocated (0 - 100)", value=0))
    })
  })
})

任何人都可以請求上述協助嗎?

我相信解決方案是讓最終的數字輸入模仿數字輸入,但實際上只是一個計算輸出。 而不是創建與numAssets一樣多的數字輸入,創建少1。 然后創建另一個看起來像其余的輸出,但其值是計算而不是輸入。 一般來說,下面的代碼可以做到這一點,但是不能很好地模仿其他數字輸入的外觀。 此代碼也可以從github中提取。

ui.R

library(shiny)
shinyUI(pageWithSidebar (
  headerPanel( "Portfolio Returns"),
  sidebarPanel(
    numericInput("assets", label = "Enter Number of variants in Experiment", value="3")
  ),
  mainPanel(
    uiOutput("variants"),
    uiOutput("lastVariant"))
))

server.R

library(shiny)
shinyServer( function(input, output, session) {
  output$variants <- renderUI({
    numAssets <- as.integer(input$assets)  
      lapply(1:(numAssets-1), function(i) {
        list(tags$p(tags$u(h4(paste0("Variant ", i, ":")))),
             textInput(paste0("variant", i), label = "Variant Name", value = paste0("Variant ", i, " name..."))
             , numericInput(paste0("weight", i)
                            , label = "Proportion allocated (0 - 100)", value=0)
        )
      }) #end of lapply
  }) # end of renderUI

  output$lastVariant <- renderUI({
    numAssets <- as.integer(input$assets)
    for (j in 1:(numAssets-1)){
      if(j==1){x=100}
      x = x - input[[paste0("weight",j)]]
    }
    tagList(
      tags$p(tags$u(h4(paste0("Variant ", numAssets, ":")))),
      textInput(paste0("variantFinal"), label = "Variant Name", value = paste0("Variant ", numAssets, " name...")), 
      tags$p(tags$b("Proportion allocated (0 - 100)")),
      helpText(paste0(x))
    ) #end of tagList
  }) #end of renderUI
}) #end of shinyServer

暫無
暫無

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

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