は、輝くプログラミングについて学生に教えるときにこの奇妙な問題に遭遇しました。私が望んでdelete verbatimtextOutput
が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)
EDITバージョン:このバージョンは削除され、UIの逐語的な要素をリメイクするよう
変更ポークチョップは少しに答えます。 私が今完全に理解しようとしているのは、作品req(....)がそのような影響を持つ理由です。 print(values $ name)は変数が存在することを証明し、観察者はそれを見ていますが、req()行があれば、アプリケーションは突然、最初に削除された後にverbatimtextputを再作成しません。 私はなぜこれが当てはまるのか学ぶことができます。ありがとうございました!
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)}
})
})
})
}
私は、あなたにもissuの負荷があるので、何か教えが必要だと思いますあなたのコードで! –
答え、第二回ありがとう、第二回私は完璧から遠いことを知っていますが、それでも自分自身を学び、そのすべてを掌握しているので、ときどき奇妙な方法でコードします。これは単純な間違いだった、私のバージョンは括弧を持っていた、私の学生のバージョンはなかった。正直言って、私は彼のコードに中括弧がないことに気づいていませんでした。本当にそれらは必要です。私はいつもそれらを使用します。 – Mark
@Ben、リンクありがとう。私はそれを教えと呼ぶ限りは行かないだろう。私はまだ自分で学習者が多すぎますが、ビルドしているプログラムで私のコードがどのように働いているのかを私の同僚に示す必要があります – Mark