38

在网络浏览器中,您将参数传递给网站,例如

www.mysite.com/?parameter=1

我有一个闪亮的应用程序,我想在计算中使用传递给站点的参数作为输入。那么是否可以执行类似 www.mysite.com/?parameter=1 的操作,然后使用 input!parameter?

你能提供任何示例代码或链接吗?

谢谢

4

3 回答 3

55

当应用程序基于 URL 初始化时,您必须自己更新输入。您将使用该session$clientData$url_search变量来获取查询参数。这是一个示例,您可以轻松地将其扩展为您的需求

library(shiny)

shinyApp(
  ui = fluidPage(
    textInput("text", "Text", "")
  ),
  server = function(input, output, session) {
    observe({
      query <- parseQueryString(session$clientData$url_search)
      if (!is.null(query[['text']])) {
        updateTextInput(session, "text", value = query[['text']])
      }
    })
  }
)
于 2015-09-30T19:29:48.127 回答
16

在 daattali 的基础上,这需要任意数量的输入,并为您为几种不同类型的输入分配值:

ui.R:

library(shiny)

shinyUI(fluidPage(
textInput("symbol", "Symbol Entry", ""),

dateInput("date_start", h4("Start Date"), value = "2005-01-01" ,startview = "year"),

selectInput("period_select", label = h4("Frequency of Updates"),
            c("Monthly" = 1,
              "Quarterly" = 2,
              "Weekly" = 3,
              "Daily" = 4)),

sliderInput("smaLen", label = "SMA Len",min = 1, max = 200, value = 115),br(),

checkboxInput("usema", "Use MA", FALSE)

))

服务器.R:

shinyServer(function(input, output,session) {
observe({
 query <- parseQueryString(session$clientData$url_search)

 for (i in 1:(length(reactiveValuesToList(input)))) {
  nameval = names(reactiveValuesToList(input)[i])
  valuetoupdate = query[[nameval]]

  if (!is.null(query[[nameval]])) {
    if (is.na(as.numeric(valuetoupdate))) {
      updateTextInput(session, nameval, value = valuetoupdate)
    }
    else {
      updateTextInput(session, nameval, value = as.numeric(valuetoupdate))
    }
  }

 }

 })
})

测试 URL 示例:127.0.0.1:5767/?symbol=BBB,AAA,CCC,DDD&date_start=2005-01-02&period_select=2&smaLen=153&usema=1

于 2016-01-15T00:32:13.497 回答
0

Shiny App:如何通过 URL 传递多个令牌/参数

通过 url 传递给闪亮应用程序的令牌的标准分隔符是&符号。

闪亮的应用程序代码示例:

server <- function(input, output, session) {
  observe({
    query <- parseQueryString(session$clientData$url_search)
    if (!is.null(query[['paramA']])) {
        updateTextInput(session, "InputLabel_A", value = query[['paramA']])
    }
    if (!is.null(query[['paramB']])) {
        updateTextInput(session, "InputLabel_A", value = query[['paramB']])
    }
  })
  # ... R code that makes your app produce output ..
}

对应的 URL 示例: http ://localhost.com/?paramA=hello&?paramB=world

参考:parseQueryString 文档

于 2021-01-03T17:10:11.180 回答