【发布时间】:2017-10-18 11:43:21
【问题描述】:
在教授学生闪亮编程时遇到了这个奇怪的问题。
我想要的是编写删除 verbatimtextOuput 元素的代码,而不是打印一个空值
这是他写的代码,但它删除了所有按钮,基本上是整个 UI。这可以做到吗?我知道更复杂的选项,例如条件面板等,但只是想弄清楚为什么 removeUI 没有达到我的预期。
谢谢!
应用程序:
library(shiny)
ui<-fluidPage( h5("Hello there"), #First text on the window
br(), #empty line
actionButton(inputId = "ClickonMe", label = "Make data"), # button 1
actionButton(inputId = "ClickonMe2", label = "Print data"), # button 2
actionButton(inputId = "ClickonMe3", label = "Transform data"),
verbatimTextOutput("Response_text") #reactive text output )
server <- function(input,output) {
values <- reactiveValues()
observeEvent(input$ClickonMe,
values$name <- TRUE )
observeEvent(input$ClickonMe3,
if (values$name == TRUE) { values$name <- FALSE}
else { values$name <- TRUE} )
observeEvent(input$ClickonMe2,
if (values$name == TRUE) { output$Response_text <- renderPrint( isolate({values$name}) ) }
else if (values$name == FALSE) { removeUI(
selector = "div:has(> #Response_text)"
)
}
) }
shinyApp(ui, server)
编辑版本:
更改了猪排回答一点,以便此版本删除并重新制作 ui 中的逐字元素。 我现在试图完全理解的是,为什么片 req(....) 会产生如此大的影响。 print(values$name) 证明变量存在,并且观察者可以看到它,但是如果您 # req( ) 行,应用程序会在第一次删除它后突然停止重新创建逐字文本输出。 希望我能了解为什么会这样。谢谢!
library(shiny)
ui <- fluidPage(
h5("Hello there"), # First text on the window
br(), # empty line
actionButton(inputId = "ClickonMe", label = "Make data"), # button 1
actionButton(inputId = "ClickonMe2", label = "Print data"), # button 2
actionButton(inputId = "ClickonMe3", label = "Transform data"),
mainPanel(verbatimTextOutput("Response_text"))
)
server <- function(input,output,session) {
values <- reactiveValues()
values$name <- T
observeEvent(input$ClickonMe,{
values$name <- T
})
observeEvent(input$ClickonMe3,{
if (values$name){ values$name <- F}
else{ values$name <- T }
})
observeEvent(input$ClickonMe2,{
print(values$name)
output$Response_text <- renderPrint({ isolate({
req(values$name)
if(!values$name){
removeUI(
selector = "div:has(> #Response_text)"
)
}else {
as.character(values$name)}
})
})
})
}
【问题讨论】:
-
我认为你也需要一些教学,因为你的代码有很多问题!
-
好的,第一次感谢您的回答,第二次我知道我远非完美,我自己仍在学习和努力,所以我有时会以奇怪的方式编码。这是一个简单的错误,我的版本有括号,我的学生版本没有。老实说,我没有发现他的代码中没有大括号,是的,你确实需要这些,我总是使用它们
-
@Ben,嘿,谢谢你的链接。我不会称之为教学。我自己仍然是一个学习者,但我必须向我的同事展示我的代码在我正在构建的程序中是如何工作的