【问题标题】:Producing dynamic/multiple input boxes to collect data depending on user selection in Shiny R根据 Shiny R 中的用户选择,生成动态/多个输入框以收集数据
【发布时间】:2015-06-01 01:25:22
【问题描述】:

我正在尝试在 Shiny 中构建一个应用程序,该应用程序 (1) 询问用户他/她的投资组合中的资产数量。根据数字输入,(2) 向用户呈现一个数字框以输入拥有的投资组合的百分比和资产的代码/名称。 例如,如果用户输入 3 作为投资组合中的资产数量,他将看到如下内容:

Asset1 ----> Enter ticker______      Enter Wight______

Asset2 ----> Enter ticker______      Enter Wight______

Asset3 ----> Enter ticker______      Enter Wight______

这假设是动态的,因此资产数量越多,输入字段就越大。 最后,在步骤(3)中,我想将每个 Asset 的输入信息保存在一个表格中并显示该表格。

这就是我所拥有的,但离我需要的还很远。我对 Shiny 完全陌生,这就是我遇到麻烦的一半原因:

UI.R

 shinyUI(pageWithSidebar (

  headerPanel( "Portfolio Returns"),

  sidebarPanel(

    numericInput("assets", label = "Enter Total Assets", value="")
    
  ),
 mainPanel(

tableOutput("table"))     
 )
) 

服务器.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="")
  
     })
    })

  })
 })

我知道代码是完整的,因为我不知道下一步该做什么。这就是我从网上搜索得到的全部信息。非常感谢您的帮助。

【问题讨论】:

  • 我认为这可能是您正在寻找的 - 请务必阅读 cmets:stackoverflow.com/questions/19130455/…
  • 没有。我在发帖之前看到了那个帖子。尝试使用那里的东西,但无法走远。我的问题是我正在尝试输入数据(而不是选择)并保存它。

标签: r dynamic input render shiny


【解决方案1】:

ui.R

library(shiny)

shinyUI(pageWithSidebar (

  headerPanel( "Portfolio Returns"),

  sidebarPanel(
    numericInput("assets", label = "Enter Number of Assets in Portfolio", value="1"),
    uiOutput("tickers")
  ),
  mainPanel()
)) 

服务器.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))  
    })
  })
})  

【讨论】:

  • 这是完美的。正是我想要的。谢谢。但我确实有一个后续问题 - tag$p/tag$u 是做什么的?
  • 它允许您使用 html 来更改应用程序样式的各个方面,但您可以使用闪亮的“标签”而不是传递标准的 html 代码。 shiny.rstudio.com/articles/tag-glossary.html
  • 此外,习惯上单击答案左上角的向上箭头和复选标记,以向未来用户表明它回答了您的问题或对回答您的问题最有帮助。
  • 您知道如何将输入的数据保存到表格或矩阵中并显示吗?
猜你喜欢
  • 1970-01-01
  • 2018-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-22
  • 2018-03-22
  • 2017-05-31
  • 1970-01-01
相关资源
最近更新 更多