小编Jep*_* S.的帖子

R Shiny:在服务器端使用Onclick Option of Action按钮

我想制作一个Shiny App,用户可以按下一个动作按钮,然后在服务器端触发一些代码,在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)
Run Code Online (Sandbox Code Playgroud)

但是这不起作用,因为onclick动作是在评估observevent之前完成的.

然后我尝试在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)
Run Code Online (Sandbox Code Playgroud)

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

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

任何帮助将不胜感激!

干杯

更新:

我发现Dean Attali 的伟大的shinyjs包含了一个onclick功能,可能在这里有所帮助.我试着运行下面的代码,但它不起作用:/

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


    server <- …
Run Code Online (Sandbox Code Playgroud)

r shiny shinyjs

6
推荐指数
1
解决办法
3930
查看次数

设置 R DT 数据表中 lengthMenu(页面长度菜单)中值的名称

我正在使用 R DT 包制作数据表。我希望用户能够决定/控制是否查看数据中的 24、48、72、96 行或所有行。

这可以通过设置轻松完成:

lengthMenu = c(24,48, 72, 96, -1),
Run Code Online (Sandbox Code Playgroud)

在选项列表中,其中-1代表所有条目。

问题是用户可能不知道 -1 代表什么,因此我想让它在用户可见的菜单中显示为字符串“All”。

通过查看lengthMenu 的文档,我发现这可以通过编写来完成

$('#example').dataTable( {
"lengthMenu": [ [10, 25, 50, -1], [10, 25, 50, "All"] ]
} );
Run Code Online (Sandbox Code Playgroud)

但我不知道如何将其翻译成 R 语言。我尝试过使用命名列表、向量和数组,但都没有成功。

下面是一个简单的例子:

library(shiny)
library(DT)

ui <- fluidPage(
  DT::dataTableOutput("table")
)

server <- function(input, output) {
  output$table <- DT::renderDataTable({
    DT::datatable(iris, options = list(pageLength = 24, 
                  lengthMenu = c(24,48, 72, 96, -1), paging = T))
  })
}

shinyApp(ui, server) 
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!

谢谢

r shiny dt

4
推荐指数
1
解决办法
3214
查看次数

如何从服务器端查看闪亮的仪表板框是否折叠

我试图找到一种方法来检查 Shiny Dashboard Box 是折叠还是展开。

通过阅读@daattali 在如何在闪亮的仪表板中手动折叠框的精彩回复,我知道可以使用 Shinyjs 包从服务器端折叠框,如下面的代码所示

library(shiny)
library(shinydashboard)
library(shinyjs)

jscode <- "
shinyjs.collapse = function(boxid) {
$('#' + boxid).closest('.box').find('[data-widget=collapse]').click();
}
"

ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(),
  dashboardBody(
    useShinyjs(),
    extendShinyjs(text = jscode),
    actionButton("bt1", "Collapse box1"),
    actionButton("bt2", "Collapse box2"),
    br(), br(),
    box(id = "box1", collapsible = TRUE, p("Box 1")),
    box(id = "box2", collapsible = TRUE, p("Box 2"))
  )
)

server <- function(input, output) {
  observeEvent(input$bt1, {
    js$collapse("box1")
  })
  observeEvent(input$bt2, {
    js$collapse("box2")
  })
}

shinyApp(ui, server)  
Run Code Online (Sandbox Code Playgroud)

通过检查 UI …

r shiny shinydashboard shinyjs

3
推荐指数
1
解决办法
1432
查看次数

标签 统计

r ×3

shiny ×3

shinyjs ×2

dt ×1

shinydashboard ×1