你如何通过 URL 将参数传递给闪亮的应用程序
How do you pass parameters to a shiny app via URL
在网络浏览器中,您将参数传递给网站,例如
www.mysite.com/?参数=1
我有一个闪亮的应用程序,我想在计算中使用传递给网站的参数作为输入。那么是否可以做类似 www.mysite.com/?parameter=1 然后使用 input!parameter?
能否提供示例代码或链接?
谢谢
当应用根据 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']])
}
})
}
)
在 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)
))
server.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
Shiny App:如何通过 URL
传递多个 Tokens/Parameters
通过 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 ..
}
根据 DeanAttali 的想法,此代码段将 re-generate URL 置于顶部,以便用户可以复制 link 以与其他人共享。
stringr::
部分可能会增强到 URL-friendly。
library(stringr)
library(glue)
library(shiny)
# http://127.0.0.1:8080/?text=hello+world+I%27m+a+shiny+app
shinyApp(
ui = fluidPage(
textOutput("url"),
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']])
}
})
output$url <- renderText({
stringr::str_replace_all(glue::glue("http://127.0.0.1:8080/?text={input$text}"), ' ', '+')
})
},
options=list(port=8080)
)
在网络浏览器中,您将参数传递给网站,例如
www.mysite.com/?参数=1
我有一个闪亮的应用程序,我想在计算中使用传递给网站的参数作为输入。那么是否可以做类似 www.mysite.com/?parameter=1 然后使用 input!parameter?
能否提供示例代码或链接?
谢谢
当应用根据 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']])
}
})
}
)
在 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)
))
server.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
Shiny App:如何通过 URL
传递多个 Tokens/Parameters通过 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 ..
}
根据 DeanAttali 的想法,此代码段将 re-generate URL 置于顶部,以便用户可以复制 link 以与其他人共享。
stringr::
部分可能会增强到 URL-friendly。
library(stringr)
library(glue)
library(shiny)
# http://127.0.0.1:8080/?text=hello+world+I%27m+a+shiny+app
shinyApp(
ui = fluidPage(
textOutput("url"),
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']])
}
})
output$url <- renderText({
stringr::str_replace_all(glue::glue("http://127.0.0.1:8080/?text={input$text}"), ' ', '+')
})
},
options=list(port=8080)
)