r闪亮的制作路径位置在DT表列中可单击和可导航

发布于 2025-02-12 08:45:01 字数 4432 浏览 0 评论 0原文

我有一个Shiny应用程序,该应用将数据库显示为dt表。在此表中,有一个名为project.file.location的列,其中包含项目的path

我希望该应用具有制作这些路径单击的能力,以便当用户单击PATH上时,应用程序将打开该应用程序folder

我该怎么做?

  • 请注意,此应用不会在rshiny服务器上部署,而是我将使用rinno软件包来创建独立的桌面应用程序。

  • 基于IZ100的注释,也许FlexDashboard可能是另一个选项,因为它是.RMD文件,因此我认为不部署该应用程序。

示例数据:

structure(list(Reference.Number = c("33333", "44444", "22222", 
"55555", "66666"), Request.Date = c("1/6/2022", "1/6/2022", "1/19/2022", 
"1/20/2021", "1/24/2022"), Requestor.Name = c("Comm Dist 3 by Kitty", 
"Comm Dist 3 by Kitty", "Updated maps for David", 
"    Stone Cold", "Updated SOE 60 inch wall map"), Requestor.Dept.Div = c("C 3 Staff", 
"C 3 Staff", "Unincorp & Comm", "Mt.Rushmore AME Church Ft. Billy", 
"SOE"), Requestor.Phone = c("", "", "", "", ""), Contact.Person = c("Tommy", 
"Tommy", "Bob", "Bob", "Joe"), Contact.Phone = c("1111", 
"2222", "3333", "ext 1111", "3434"), Deadline = c("1/20/2022", 
"1/20/2022", "1/22/2022", "", "1/24/2022"), Project.Description = c("45x36 portrait map ", 
"45x36 portrait map  ", 
"24x24 Unincorporated areas, "Percent Females Aged 25 - 55  Below Poverty Level By Zip Code", 
"SOE Wall Map 60x60 p), Project.File.Location = c("", 
"", "C:\\ABC\\Tommy\\work|Map-Projects\\BD Unincororated\\#14785 Unincorporated 24x24.pdf", 
"C:\\ABC\\Demographics\\Demographic_Request\\FemalesAge10-18BelowPoveryLevel\\FemalesAge10-18BelowPoveryLevel.aprx", 
"C:\\ABC\\Tommy\\work|Map-Projects\\BD Unincororated\\#14786 V P 60x60.pdf"
), PDF.File.....Map.Name.... = c("", "", "", "C:\\ABC\\Demographics\\Demographic_Request\\FemalesAge10-18BelowPoveryLevel\\pdfs\\MapNo14785.pdf", 
""), Assigned.To = c("", "", "", "", ""), Completion.Date = c("", 
"", "", "", ""), Notes = c(NA, NA, NA, NA, NA), Year = c(2022, 
2022, 2022, 2022, 2022)), class = "data.frame", row.names = c(NA, -5L))

代码:

library(shiny)
library(shinythemes)
library(shinyWidgets)
library(shinyanimate)
library(DT)
library(tidyverse)

    # Define UI for application that draws a histogram
    ui =   navbarPage(
                      tags$style("table, .table {color: unset;} .dataTable th, .datatables input {color: white}"),
                      title = div("GIS Team Projects"),
                      theme = shinytheme("cyborg"),
                      tabPanel("GIS Projects",
                               icon = icon("info"),
                               div(p(h1("Instructions:"),style="text-align: justify;")),
                               p("1. The user can add their project details.", style="color:black"),
                               uiOutput("all"),
                      sidebarLayout(
                        sidebarPanel(
                          actionButton("addData", "Add Project Details"),
                          ),
                        mainPanel(
                          downloadButton("download1","Download data as csv"),                
                          DTOutput("contents")),)
                        )
    )
    
    # Define server logic required to draw a histogram
    server <- function(input, output) {
    
      myData = df
      
      # Create an 'empty' tibble 
       user_table =
         myData %>% 
          slice(1) %>% 
        # Transpose the first row of test into two columns
        gather(key = "column_name", value = "value") %>%
        # Replace all values with ""
        mutate(value = "") %>%
        # Reshape the data from long to wide
        spread(column_name, value) %>%
        # Rearrange the column order to match that of test
        select(colnames(myData))
       
       # Display data as is
       output$contents =
         renderDT(myData,
                  server = FALSE,
                  editable = TRUE,
                  options = list(lengthChange = TRUE),
                  rownames = FALSE)
       
       # Store a proxy of contents 
       proxy = dataTableProxy(outputId = "contents")
       
       # Each time addData is pressed, add user_table to proxy
       observeEvent(eventExpr = input$addData, {
         proxy %>% 
           addRow(user_table)
       })
      
    }
    
    # Run the application 
    shinyApp(ui = ui, server = server)

I have a Shiny app that shows the database as a DT table. In this table there is a column called Project.File.Location that contains a project's path.

I want the app to have the ability to make these paths clickable, so that when the user clicks on a path the app will open that folder.

How can I do this?

  • Please note that this app will not be deployed on the RShiny server rather I will be using the RInno package to create a standalone desktop app.

  • Based on Iz100's comments, maybe flexdashboard could be another option as it's an .Rmd file so I think doesn't deploy the app.

Sample Data:

structure(list(Reference.Number = c("33333", "44444", "22222", 
"55555", "66666"), Request.Date = c("1/6/2022", "1/6/2022", "1/19/2022", 
"1/20/2021", "1/24/2022"), Requestor.Name = c("Comm Dist 3 by Kitty", 
"Comm Dist 3 by Kitty", "Updated maps for David", 
"    Stone Cold", "Updated SOE 60 inch wall map"), Requestor.Dept.Div = c("C 3 Staff", 
"C 3 Staff", "Unincorp & Comm", "Mt.Rushmore AME Church Ft. Billy", 
"SOE"), Requestor.Phone = c("", "", "", "", ""), Contact.Person = c("Tommy", 
"Tommy", "Bob", "Bob", "Joe"), Contact.Phone = c("1111", 
"2222", "3333", "ext 1111", "3434"), Deadline = c("1/20/2022", 
"1/20/2022", "1/22/2022", "", "1/24/2022"), Project.Description = c("45x36 portrait map ", 
"45x36 portrait map  ", 
"24x24 Unincorporated areas, "Percent Females Aged 25 - 55  Below Poverty Level By Zip Code", 
"SOE Wall Map 60x60 p), Project.File.Location = c("", 
"", "C:\\ABC\\Tommy\\work|Map-Projects\\BD Unincororated\\#14785 Unincorporated 24x24.pdf", 
"C:\\ABC\\Demographics\\Demographic_Request\\FemalesAge10-18BelowPoveryLevel\\FemalesAge10-18BelowPoveryLevel.aprx", 
"C:\\ABC\\Tommy\\work|Map-Projects\\BD Unincororated\\#14786 V P 60x60.pdf"
), PDF.File.....Map.Name.... = c("", "", "", "C:\\ABC\\Demographics\\Demographic_Request\\FemalesAge10-18BelowPoveryLevel\\pdfs\\MapNo14785.pdf", 
""), Assigned.To = c("", "", "", "", ""), Completion.Date = c("", 
"", "", "", ""), Notes = c(NA, NA, NA, NA, NA), Year = c(2022, 
2022, 2022, 2022, 2022)), class = "data.frame", row.names = c(NA, -5L))

Code:

library(shiny)
library(shinythemes)
library(shinyWidgets)
library(shinyanimate)
library(DT)
library(tidyverse)

    # Define UI for application that draws a histogram
    ui =   navbarPage(
                      tags$style("table, .table {color: unset;} .dataTable th, .datatables input {color: white}"),
                      title = div("GIS Team Projects"),
                      theme = shinytheme("cyborg"),
                      tabPanel("GIS Projects",
                               icon = icon("info"),
                               div(p(h1("Instructions:"),style="text-align: justify;")),
                               p("1. The user can add their project details.", style="color:black"),
                               uiOutput("all"),
                      sidebarLayout(
                        sidebarPanel(
                          actionButton("addData", "Add Project Details"),
                          ),
                        mainPanel(
                          downloadButton("download1","Download data as csv"),                
                          DTOutput("contents")),)
                        )
    )
    
    # Define server logic required to draw a histogram
    server <- function(input, output) {
    
      myData = df
      
      # Create an 'empty' tibble 
       user_table =
         myData %>% 
          slice(1) %>% 
        # Transpose the first row of test into two columns
        gather(key = "column_name", value = "value") %>%
        # Replace all values with ""
        mutate(value = "") %>%
        # Reshape the data from long to wide
        spread(column_name, value) %>%
        # Rearrange the column order to match that of test
        select(colnames(myData))
       
       # Display data as is
       output$contents =
         renderDT(myData,
                  server = FALSE,
                  editable = TRUE,
                  options = list(lengthChange = TRUE),
                  rownames = FALSE)
       
       # Store a proxy of contents 
       proxy = dataTableProxy(outputId = "contents")
       
       # Each time addData is pressed, add user_table to proxy
       observeEvent(eventExpr = input$addData, {
         proxy %>% 
           addRow(user_table)
       })
      
    }
    
    # Run the application 
    shinyApp(ui = ui, server = server)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文