[英]Unable to figure out how to create and run my user-defined R function in Shiny with input text boxes
[英]Dynamically Create and User Input Boxes Shiny
我正在嘗試使用動態響應式UI創建閃亮的用戶界面。
用戶基本上必須輸入實驗的變體數量(1-10)。
對於每個變體,用戶需要在文本框中輸入變體名稱,並且還要按比例1 - 100分配給每個變體。 所有變體的比例總和應該增加到100。
例如,用戶選擇5種變體。 然后,對於每個變體1-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中提取。
library(shiny)
shinyUI(pageWithSidebar (
headerPanel( "Portfolio Returns"),
sidebarPanel(
numericInput("assets", label = "Enter Number of variants in Experiment", value="3")
),
mainPanel(
uiOutput("variants"),
uiOutput("lastVariant"))
))
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.