R闪亮的应用程序之间建立链接
问题描述:
我有两个闪亮的应用程序,我想链接到另一个。其中一个数据表具有一些我想链接到另一个应用程序的值,我可以从selectInput
选项中选择该值。R闪亮的应用程序之间建立链接
概括起来我有一个应用程序,看起来像这样(从here拍摄):
library(shiny)
library(DT)
server <- function(input, output) {
output$iris_type <- DT::renderDataTable({
datatable(data.frame(Species=paste0("<a href='#filtered_data'>", unique(iris$Species), "</a>")),
escape = FALSE,
callback = JS(
'table.on("click.dt", "tr", function() {
tabs = $(".tabbable .nav.nav-tabs li a");
$(tabs[1]).click();})'))
})
output$filtered_data <- DT::renderDataTable({
selected <- input$iris_type_rows_selected
if(is.null(selected)){
datatable(iris)
} else {
datatable(iris[iris$Species %in% unique(iris$Species)[selected], ])
}
})
}
ui <- shinyUI(fluidPage(
mainPanel(
tabsetPanel(
tabPanel("Iris Type", DT::dataTableOutput("iris_type")),
tabPanel("Filtered Data", DT::dataTableOutput("filtered_data"))
)
)
))
shinyApp(ui = ui, server = server)
而另一个问题:
library(shiny)
library(dplyr)
library(tidyr)
data(iris)
server <- shinyServer(function(input, output) {
iris1 <- reactive({
iris %>%
filter(Species %in% input$select)
})
output$filtered_data <- DT::renderDataTable({
datatable(iris1())
})
})
ui <- shinyUI(fluidPage(
mainPanel(
selectInput("select", label=h3("Iris Type"), choices=list('setosa', 'versicolor', 'virginica'),
selected='setosa', multiple=FALSE),
DT::dataTableOutput("filtered_data")
)
))
shinyApp(ui = ui, server = server)
(我知道这是一个愚蠢的例子,但它显示了我想要什么)
当我点击第一个应用程序中的物种之一,我想它链接到第二个应用程序而不是o f选择另一个选项卡,然后从第一个应用程序中选择已点击的物种(请参阅下图)。
我想我必须将链接从"<a href='#filtered_data'>", unique(iris$Species), "</a>"
更改为另一个应用的链接,但我不知道如何在第二个应用中更改我的selectInput
选项的值。请帮忙。
答
修订我先前的响应,(因为,同意了,一个简单的解决方案应提供)
相反,这里是建于挖掘会话对象的解决方案:
如果打开经由
<a href="http://server.com/app2?Species=setosa">
(变化server.com/app2至y第二光泽应用我们的实际链接) 然后在第二个应用程序,包括本作的选择对象:
编辑:请注意,因为这依赖于会话对象,你的服务器功能将改变function(input,output)
到function(input,output,session)
ui.R :
htmlOutput('selectSpecies')
server.R:
output$selectSpecies <- renderUI({
URLvars <- session$clientData$url_search
# NOTE: the following regex is not one-size-fits-all
# if you use multiple inputs, you'll probably need to adjust it
# also remove special characters, because I want to sterilize our inputs
Species <- gsub('[[:punct:]]','',URLvars)
Species <- sub('^.*Species(.*$)','\\1',URLvars)
selectInput("select", label=h3("Iris Type"), choices=list('setosa', 'versicolor', 'virginica'),
selected=ifelse(Species=="",'setosa',Species), multiple=FALSE)
})
所以会话对象确实包含的所述部分它打开的网址,所以这只是一个将该信息转换为我们可以使用的变量的问题。
http://stackoverflow.com/questions/25297489/accept-http-request-in-r-shiny-application这似乎非常接近你在做什么。 – Shape
也许它很接近,但我不知道如何使用链接中的答案来解决我的问题。 – potockan