继续Mark的建议here,我现在正在使用uiOutput
和renderUI
。
下面的代码显示动画gif(“ anione”)。按下“再次获得”按钮后,它将以我不完全了解的方式使用Java重置Chrome,然后通过用另一个动画gif(“ anitwo”)覆盖原始动画gif来模拟我的大型程序。
但是,不显示“ anitwo”,而是显示“ anione”。我可以查看本地文件,并查看该文件是否已写入并通过在Chrome中打开它来成功查看。如何查看同名的其他文件?
我意识到我对“ www / tmp / ani.gif”和“ tmp / ani.gif”的使用不一致,并且了解到闪亮的外观会在“ www”中查找文件。但是,如果没有这些不一致,我会得到找不到文件的错误。
ani.gif和ani2.gif是here。
library(shiny)
library(shinyjs)
library(magick)
jsCode <- '
shinyjs.reset_anim = function() {
var div_elem = document.getElementById("anim_plot");
var img_elem = div_elem.getElementsByTagName("img")[0];
var src_value = img_elem.getAttribute("src");
img_elem.setAttribute("src", "");
img_elem.setAttribute("src", src_value);
}
'
# Define UI ----
ui <- fluidPage(useShinyjs(),
extendShinyjs(text = jsCode),
uiOutput('anim_plot'),
fluidRow(
column(3,
actionButton("do_again", "Again")
)
)
)
# Define server logic ----
server <- function(input, output) {
output$anim_plot <- renderUI({
img(src = 'tmp/ani.gif',
width = '900')
})
observeEvent(input$do_again, {
print("Again")
js$reset_anim()
# When Again clicked, simulate the creation of a new animated gif by reading in a file and
# over writing the old one. Try displaying this new animated gif.
img2 <- image_read("www/tmp/ani2.gif")
image_write(img2, path = "www/tmp/ani.gif")
output$anim_plot <- renderUI({
img(src = 'tmp/ani.gif',
width = '900')
})
})
}
shinyApp(ui = ui, server = server)
答案 0 :(得分:1)
你不能简单地做
library(shiny)
# Define UI ----
ui <- fluidPage(
uiOutput('anim_plot'),
fluidRow(
column(3,
actionButton("do_again", "Again")
)
)
)
# Define server logic ----
server <- function(input, output) {
gif <- reactiveVal("ani.gif")
observeEvent(input$do_again, {
gif("ani2.gif")
})
output$anim_plot <- renderUI({
img(src = gif(), width = "256")
})
}
shinyApp(ui = ui, server = server)