根据 Shiny R 中的用户选择生成 dynamic/multiple 个输入框以收集数据
Producing dynamic/multiple input boxes to collect data depending on user selection in Shiny R
我正在尝试在 Shiny 中构建一个应用程序,该应用程序 (1) 要求用户提供 his/her 投资组合中的资产数量。根据数字条目,(2) 用户会看到一个数字框,用于输入拥有的投资组合百分比和资产的 Ticker/name。
例如,如果用户在投资组合中输入 3 作为资产数量,他将看到如下内容:
Asset1 ----> Enter ticker______ Enter Wight______
Asset2 ----> Enter ticker______ Enter Wight______
Asset3 ----> Enter ticker______ Enter Wight______
这应该是动态的,因此资产数量越多,输入字段越大。
最后,在步骤(3)中,我想将每个资产的输入信息保存在 table 中并显示 table.
这就是我得到的,它离我需要的还差得很远。我对 Shiny 完全陌生,这是我遇到麻烦的一半原因:
UI.R
shinyUI(pageWithSidebar (
headerPanel( "Portfolio Returns"),
sidebarPanel(
numericInput("assets", label = "Enter Total Assets", value="")
),
mainPanel(
tableOutput("table"))
)
)
server.R
shinyServer(
function(input,output) {
output$DynamicAssets <- renderUI ({
Assets <- as.integer(input$assets)
for(i in 1:Assets,function(i) {
"ticker" = textInput("Ticker", label="Enter Ticker", value="Enter Ticker"),
"weight" = numericInput ("AssetWeight", label="weights of Assets", value="")
})
})
})
})
我知道代码已经完成,因为我不知道下一步该做什么。这就是我从网上搜索得到的全部内容。非常感谢您的帮助。
ui.R
library(shiny)
shinyUI(pageWithSidebar (
headerPanel( "Portfolio Returns"),
sidebarPanel(
numericInput("assets", label = "Enter Number of Assets in Portfolio", value="1"),
uiOutput("tickers")
),
mainPanel()
))
server.R
- 请注意,要在 renderUI()
函数中传递多个项目,您必须将它们分组到一个列表中,这里 lapply()
正在创建一个列表列表。
library(shiny)
shinyServer( function(input, output, session) {
output$tickers <- renderUI({
numAssets <- as.integer(input$assets)
lapply(1:numAssets, function(i) {
list(tags$p(tags$u(h4(paste0("Asset ", i)))),
textInput(paste0("ticker", i), label = "Ticker Name", value = "Enter ticker..."),
numericInput(paste0("weight", i), label = "Weight of Asset", value=0))
})
})
})
我正在尝试在 Shiny 中构建一个应用程序,该应用程序 (1) 要求用户提供 his/her 投资组合中的资产数量。根据数字条目,(2) 用户会看到一个数字框,用于输入拥有的投资组合百分比和资产的 Ticker/name。 例如,如果用户在投资组合中输入 3 作为资产数量,他将看到如下内容:
Asset1 ----> Enter ticker______ Enter Wight______
Asset2 ----> Enter ticker______ Enter Wight______
Asset3 ----> Enter ticker______ Enter Wight______
这应该是动态的,因此资产数量越多,输入字段越大。 最后,在步骤(3)中,我想将每个资产的输入信息保存在 table 中并显示 table.
这就是我得到的,它离我需要的还差得很远。我对 Shiny 完全陌生,这是我遇到麻烦的一半原因:
UI.R
shinyUI(pageWithSidebar (
headerPanel( "Portfolio Returns"),
sidebarPanel(
numericInput("assets", label = "Enter Total Assets", value="")
),
mainPanel(
tableOutput("table"))
)
)
server.R
shinyServer(
function(input,output) {
output$DynamicAssets <- renderUI ({
Assets <- as.integer(input$assets)
for(i in 1:Assets,function(i) {
"ticker" = textInput("Ticker", label="Enter Ticker", value="Enter Ticker"),
"weight" = numericInput ("AssetWeight", label="weights of Assets", value="")
})
})
})
})
我知道代码已经完成,因为我不知道下一步该做什么。这就是我从网上搜索得到的全部内容。非常感谢您的帮助。
ui.R
library(shiny)
shinyUI(pageWithSidebar (
headerPanel( "Portfolio Returns"),
sidebarPanel(
numericInput("assets", label = "Enter Number of Assets in Portfolio", value="1"),
uiOutput("tickers")
),
mainPanel()
))
server.R
- 请注意,要在 renderUI()
函数中传递多个项目,您必须将它们分组到一个列表中,这里 lapply()
正在创建一个列表列表。
library(shiny)
shinyServer( function(input, output, session) {
output$tickers <- renderUI({
numAssets <- as.integer(input$assets)
lapply(1:numAssets, function(i) {
list(tags$p(tags$u(h4(paste0("Asset ", i)))),
textInput(paste0("ticker", i), label = "Ticker Name", value = "Enter ticker..."),
numericInput(paste0("weight", i), label = "Weight of Asset", value=0))
})
})
})