【问题标题】:R Shiny: Translate into HTML UI uiOutput, htmlOutput and File UploadR Shiny:翻译成 HTML UI uiOutput、htmlOutput 和文件上传
【发布时间】:2014-02-03 17:42:54
【问题描述】:

我有一个闪亮的应用程序,我想在现有网站中实现它,因此我需要将 ui.R 转换为 HTML UI。我从 ui.R 中获得了大部分内容在 HTML UI 中工作,但我有关于 uiOutput、html 输出和文件上传的问题。

Q1:如何实现我用renderUI({})创建的动态Slider?我使用renderUI({}) 创建的动态选择工作正常,但使用滑块时出现以下错误:min, max, amd value must all be numeric values 似乎无法从 HMTL UI 向 server.R 发送数值。

Q2::正常工作的 HMTL 文件上传会是什么样子?我的似乎上传文件,但我无法将其传递给 server.R。

这是一个例子:

server.R:

library(shiny)

#sample data
years<-c(1990,1995,2000,2005,2010)
oryear<-years[3]

shinyServer(function(input, output, session) {

  #Input uploaded file
  inFile<-input$ascii_layer

  #make dynamic selection     
  output$selectUI <- renderUI({ 
   selectInput("test_select", "Test selection", years, selected=oryear) 
  })

  #make dynamic slider
  output$slider <- renderUI({
    sliderInput("inSlider", "Slider", min=input$min_val, max=input$max_val, value=2000)
  })

})

ui.R:

 library(shiny)

shinyUI(pageWithSidebar(
headerPanel("Test Shiny App"),

    sidebarPanel(

    #File Upload
        fileInput('ascii_layer', 'Choose ASCII Layer', multiple=FALSE, accept='asc'),

    #HTML Selection Output from server.R    
    htmlOutput("selectUI"),

    #Numeric Inputs
        numericInput("min_val", "Enter Minimum Value", 1993),
        numericInput("max_val", "Enter Maximum Value", 2013)

    #display dynamic UI
        uiOutput("slider")
        ),

    mainPanel()
    ))

HMTL 用户界面:

<html>

<head>
  <script src="shared/jquery.js" type="text/javascript"></script>
  <script src="shared/shiny.js" type="text/javascript"></script>
  <link rel="stylesheet" type="text/css" href="shared/shiny.css"/> 
</head>

<body>
  <h1>HTML UI</h1>

 <!—- File Upload—->
  <p>
    <form action="input_file.htm" method="post" enctype="multipart/form-data">
    <p>Choose Distance to Road Layer:<br>
    <input name="ascii_layer" type="file" size="50" maxlength="100000" accept="*.asc">
    </p>
    </form>  
  </p>

 <!—-Numeric Inputs—->
  <p>
    <label>Enter Minimum Value:</label><br />
    <input type="number" name="min_val" value="1993" />
  </p>

  <p>
    <label>Enter Maximum Value:</label><br />
    <input type="number" name="max_val" value="1993" />
  </p>


 <!—-Dynamic Selection—->
  <div id="selectUI" class="shiny-html-output"></div>

 <!—-Dynamic Slider—->
  <div id="slider" class="shiny-html-output"></div> 


</body>

</html>

【问题讨论】:

    标签: html r user-interface shiny


    【解决方案1】:

    您的 Shiny 代码中有几个错误。下面给出一个固定版本。通过复制并粘贴到 R 终端来运行它,并从浏览器查看源代码以获取您的 html-ui。我建议您在线查看 Shiny 教程(例如 http://rstudio.github.io/shiny/tutorial),了解有关文件上传等的更多详细信息。

    library(shiny)
    
    #sample data
    years <- c(1990,1995,2000,2005,2010)
    oryear <- years[3]
    
    server <- function(input, output, session) {
    
      #Input uploaded file
      # inFile<-input$ascii_layer
    
      output$contents <- renderTable({
        inFile <- input$ascii_layer
    
        if (is.null(inFile))
          return(NULL)
    
        read.csv(inFile$datapath)
      })
    
      #make dynamic selection     
      output$selectUI <- renderUI({ 
       selectInput("test_select", "Test selection", years, selected=oryear) 
      })
    
      #make dynamic slider
      output$slider <- renderUI({
        sliderInput("inSlider", "Slider", min=input$min_val, max=input$max_val, value=2000)
      })
    }
    
    ui <- pageWithSidebar(
    
      headerPanel("Test Shiny App"),
      sidebarPanel(
    
        #File Upload
        fileInput('ascii_layer', 'Choose ASCII Layer', multiple=FALSE, accept='asc'),
    
        #HTML Selection Output from server.R    
        uiOutput("selectUI"),
    
        #Numeric Inputs
        numericInput("min_val", "Enter Minimum Value", 1993),
        numericInput("max_val", "Enter Maximum Value", 2013),
    
        #display dynamic UI
        uiOutput("slider")
    
      ),
      mainPanel(
        tableOutput('contents')
      )
    )
    
    runApp(list(ui = ui, server = server))
    

    【讨论】:

    • 谢谢@Vincent。在浏览器中检查源代码对我有用。
    猜你喜欢
    • 2019-08-12
    • 2015-10-05
    • 2020-09-29
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    • 2018-12-07
    • 2020-07-29
    • 1970-01-01
    相关资源
    最近更新 更多