在R闪亮中有很多关于conditionalPanel
的问题,但我仍然不明白如何使用server.R为conditionalPanel
创建的值。这是我想要做的:我有一个像http://some-url.com/php/session_check.php?sid=session_id这样的网址。当session_id
以0开头时,与http://some-url.com/php/session_check.php?sid=00221245一样,返回带有用户名的字符串(例如'testuser')。当session_id以除0之外的任何其他数字开头时,如http://some-url.com/php/session_check.php?sid=10221245,则返回0。现在我想隐藏一个面板,具体取决于是返回0还是用户名。因此我尝试做这样的事情:
conditionalPanel(
condition="output.disable_ui!=0"
我知道这是错误的,但我并不真正理解condition
参数如何适用于outputs
,因为如果我为任何{{1}执行此操作,它将会起作用来自input
。
以下是我的示例代码:
server.R
ui.R
ui.R
library(shiny)
library(raster)
library(rgdal)
shinyServer(function(input, output, clientData) {
output$disable_ui<-reactive({
query<-parseQueryString(clientData$url_search)
url_path<-paste(sep="","http://some-url.com/php/session_check.php?sid=",query, collapse="")
read.table(url_path)
})
data <- reactive({
inFile <- input$example_layer
if (is.null(inFile))
return(NULL)
raster.file<- raster(inFile$datapath)
})
output$raster.plot <- renderPrint({
"Nothing to see here"
})
})
答案 0 :(得分:12)
@Julien Navarre是对的:必须渲染输出。除非您将其选项suspendWhenHidden
设置为FALSE
:
output$disable_ui<-reactive({
query<-parseQueryString(clientData$url_search)
url_path<-paste(sep="","http://some-url.com/php/session_check.php?sid=",query, collapse="")
read.table(url_path)
})
outputOptions(output, 'disable_ui', suspendWhenHidden=FALSE)
答案 1 :(得分:11)
我认为如果你想在output
的条件下使用它,必须在Ui中呈现conditionalPanel
。
以您为例,条件面板的HTML将如下所示:
<div data-display-if="output.disable_ui!=0">
如果页面中没有元素(在服务器端创建为输出)的id为“disable_ui”,则条件“output.disable_ui!= 0”始终为TRUE,并且条件面板始终显示。
一个简单的例子:
shiny::runApp(list(
ui = pageWithSidebar(
headerPanel("test"),
sidebarPanel(
selectInput(
"var", "Var",
0:9)),
mainPanel(
verbatimTextOutput("id"),
conditionalPanel(
condition="output.id!=0",
h4('Visible')
)
)
),
server = function(input, output) {
output$id<-reactive({input$var})
}
))
如果您选择的数字不同为0,则会显示条件面板。
现在,注释行verbatimTextOutput("id"),
,页面中没有更多带有id“id”的元素,然后条件面板<div data-display-if="output.id!=0">
的条件不能为FALSE。
答案 2 :(得分:2)
这是对这个问题的真正答案: 在您的服务器功能内使用此功能:
outputOptions(output, "outputId", suspendWhenHidden = FALSE)
然后,您将可以在conditionalPanel中使用output.item
。
从这里回答: https://github.com/daattali/advanced-shiny/blob/master/server-to-ui-variable/app.R