English 中文(简体)
在数据表正确显示时,开放环境菜单
原标题:Open a context menu when right-clicking on a datatable

I would like to open a context menu, when right clicking on a row of a datatable. The context menu would then propose to the user the option of opening a file whose path is stored in the corresponding row of the datatable, here in the column Path. How can I achieve that ? Below a simple example:


library(shiny)
library(DT)

ui <- fluidPage(
  DTOutput("myTable")
)

server <- function(input, output, session) {
  data <- data.frame(
    Name = c("File1", "File2", "File3"),
    Path = c("C:/Path/File1.txt", "C:/Path/File2.txt", "C:/Path/File3.txt")
  )
  
  output$myTable <- renderDT({
    datatable(data, escape = FALSE)
  })

}

shinyApp(ui, server)
问题回答

这里是利用 Java本图书馆j QueryContextMenu的一种方式。

library(shiny)
library(DT)
library(pander) # to use openFileInOS()

ui <- fluidPage(
  tags$head(
    tags$link(rel="stylesheet", href="https://cdnjs.cloudflare.com/ajax/libs/jquery-contextmenu/2.9.2/jquery.contextMenu.min.css"),
    tags$script(src="https://cdnjs.cloudflare.com/ajax/libs/jquery-contextmenu/2.9.2/jquery.contextMenu.min.js"),
    tags$script(src="https://cdnjs.cloudflare.com/ajax/libs/jquery-contextmenu/2.9.2/jquery.ui.position.js")
  ),
  br(),
  DTOutput("dtable")
)

dat <- data.frame(
  XXXXX = c("hello", "morning"),
  files = c("C:/SL/test1.txt", "C:/SL/test2.txt") 
)

callback <- c(
  "$.contextMenu({",
  "  selector:  #dtable tr ,", 
  "  trigger:  right ,",
  "  autoHide: true,",
  "  items: {",
  "    open: {",
  "      name:  Open file ,", 
  "      callback: function(itemKey, opts, e){",
  "        let i = $(this).index() + 1;",
  "        Shiny.setInputValue( index , i, {priority:  event });",
  "      }",
  "    }",
  "  }",
  "});"
)

server <- function(input, output, session) {
  
  output[["dtable"]] <- renderDT({
    datatable(
      dat,
      selection = "none",
      callback = JS(callback)
    )
  })
  
  observeEvent(input[["index"]], {
    file <- dat[["files"]][input[["index"]]]
    openFileInOS(file)
  })
  
}

shinyApp(ui, server)

“entergraph





相关问题
How to plot fitted model over observed time series

This is a really really simple question to which I seem to be entirely unable to get a solution. I would like to do a scatter plot of an observed time series in R, and over this I want to plot the ...

REvolution for R

since the latest Ubuntu release (karmic koala), I noticed that the internal R package advertises on start-up the REvolution package. It seems to be a library collection for high-performance matrix ...

R - capturing elements of R output into text files

I am trying to run an analysis by invoking R through the command line as follows: R --no-save < SampleProgram.R > SampleProgram.opt For example, consider the simple R program below: mydata =...

R statistical package: wrapping GOFrame objects

I m trying to generate GOFrame objects to generate a gene ontology mapping in R for unsupported organisms (see http://www.bioconductor.org/packages/release/bioc/vignettes/GOstats/inst/doc/...

Changing the order of dodged bars in ggplot2 barplot

I have a dataframe df.all and I m plotting it in a bar plot with ggplot2 using the code below. I d like to make it so that the order of the dodged bars is flipped. That is, so that the bars labeled "...

Strange error when using sparse matrices and glmnet

I m getting a weird error when training a glmnet regression. invalid class "dgCMatrix" object: length(Dimnames[[2]]) must match Dim[2] It only happens occasionally, and perhaps only under larger ...

Generating non-duplicate combination pairs in R

Sorry for the non-descriptive title but I don t know whether there s a word for what I m trying to achieve. Let s assume that I have a list of names of different classes like c( 1 , 2 , 3 , 4 ) ...

Per panel smoothing in ggplot2

I m plotting a group of curves, using facet in ggplot2. I d like to have a smoother applied to plots where there are enough points to smooth, but not on plots with very few points. In particular I d ...

热门标签