gpt4 book ai didi

R Shiny : Use Onclick Option of Actionbutton on the Server Side

转载 作者:行者123 更新时间:2023-12-04 10:08:16 28 4
gpt4 key购买 nike

我想制作一个 Shiny 的应用程序,用户可以在其中按下一个 Action 按钮,然后在服务器端触发一些代码,在 www 文件夹中创建一个文件,然后打开/下载该文件。

假设文件是​​ test.txt(在我的情况下,它将是各种 R、Excel 和 exe 文件,它们将从驱动器上的不同文件夹复制到 www 文件夹)。

我的第一次尝试是使用带有 onclick 选项的 actionbutton,如下所示

    ui <- fluidPage(
actionButton("showtxt", "Show/Download File", onclick = "window.open('test.txt')")
)


server <- function(input, output, session){
observeEvent(input$showtxt,{
# Write some text
write.table(c("Test"), file = "www/test.txt")
})
}


shinyApp(ui=ui,server=server)

但这不起作用,因为 onclick 操作是在评估观察事件之前完成的。

然后我尝试在 onclick 选项中调用一个函数,如下所示
    CreateFileAndLink <- function(){
write.table(c("Test"), file = "www/test.txt")
return("window.open('test.txt')")
}

ui <- fluidPage(
actionButton("showtxt", "Show/Download File", onclick = CreateFileAndLink())
)

server <- function(input, output, session){}

shinyApp(ui=ui,server=server)

这有效,但有一个缺点,现在文件是在打开 Shiny App 时创建的,而不是在用户单击操作按钮时创建文件。如果我要在文件相对较大的应用程序中多次使用这段代码,这是非常低效的。

也许可以确保在 onclick-action 之前执行observevent,或者在服务器端使用 onclick 选项。

任何帮助将不胜感激!

干杯

更新:

我发现 Dean Attali 的出色的 Shinyjs 包包含一个 onclick 函数,可能对这里有帮助。我试图运行下面的代码,但没有用:/
    library(shinyjs)
ui <- fluidPage(
useShinyjs(),
actionButton("showtxt", "Show/Download File")
)


server <- function(input, output, session){
observeEvent(input$showtxt,{
# Write some text
write.table(c("Test"), file = "www/test.txt")

# Call Onclick
onclick("showtxt", "window.open('test.txt')")
})
}


shinyApp(ui=ui,server=server)

最佳答案

我找到了使用来自 的 onclick 函数的解决方案Shinyjs 包裹。

    library(shinyjs)
ui <- fluidPage(
useShinyjs(),
actionButton("showtxt", "Show/Download File")
)


server <- function(input, output, session){
observeEvent(input$showtxt,{
# Write some text
write.table(c("Test"), file = "www/test.txt")
})


# Call Onclick
onclick("showtxt", runjs("window.open('test.txt')"))
}


shinyApp(ui=ui,server=server)

关于R Shiny : Use Onclick Option of Actionbutton on the Server Side,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45880437/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com