【问题标题】:R shiny - referencing a data table output for further actionsR shiny - 引用数据表输出以进行进一步操作
【发布时间】:2021-01-05 06:54:56
【问题描述】:

我有以下应用程序来上传和显示数据文件:

library(shiny)
library(DT)
library(leaflet)

ui <- fluidPage(

  titlePanel('SNP_Review'),
  sidebarLayout(
    sidebarPanel(
    fileInput('target_upload', 'Choose file to upload', accept = c(
      'text/csv',
      'text/comma-separated-values',
      '.csv'
    )),
    ),
    
  mainPanel(
    tabsetPanel(
      type = "tabs",
      tabPanel('Samples_table', DT::dataTableOutput("sample_table")),
      tabPanel('Samples_map', leafletOutput("sample_map"))
      )
    )
  )
)

server <- function(input, output) {
  
  df_products_upload <- reactive({
    inFile <- input$target_upload
    if (is.null(inFile))
      return(NULL)
    df <- read.csv(inFile$datapath, header = TRUE,sep = input$separator)
    return(df)
  })
  
  output$sample_table <- DT::renderDataTable({
    df <- df_products_upload()
    DT::datatable(df)
    
  })
  
  table_data <- reactive({
    
  })
  
  output$sample_map <- renderLeaflet({
    leaflet(data = table_data()) %>%
      addProviderTiles(providers$OpenStreetMap.DE) %>%
      addMarkers(lng = ~Longitude, lat = ~Latitude)
     
  })  
}
 
shinyApp(ui = ui, server = server)

它在表格中打印出我的数据。在下一步中,我想在带有传单的地图上显示表格的 GPS 数据。如何在表输出后定义响应式 table_data() 函数以使用地图中的数据以及可能的进一步操作?该表如下所示:

    Name_ID Population  Latitude Longitude
2 F6537_S01    Finland 60,745411 25,468228
3 N0484_S13     Norway 59,480365  7,920383
4 N0485_S25     Norway 60,925393  10,61182
5 N0486_S37     Norway 62,903547  9,824941
6 N0487_S49     Norway  61,78245 11,918215

提前致谢!

【问题讨论】:

  • 你把table_data &lt;- reactive({df_products_upload()})放进去不行吗?
  • 问题:此文件中的上传数据不是数字(“333”),我希望我可以参考输出,因为应用程序完成后上传源应该是另一个...
  • 啊,所以问题是将数据转换为正确的格式以使传单工作?您应该使用dput(df) 共享数据样本,而不仅仅是当前问题中的文本版本。

标签: r shiny leaflet reactive


【解决方案1】:

这正是reactive 函数的用途。反应式语句是惰性的,这意味着它们只被评估一次,直到被标记为无效,这发生在其中的反应式语句(例如输入或另一个反应式函数)更改值时。只要计算出响应式语句并且未标记为无效,闪亮就会将其作为对象处理。

因此,我会像这样更改您的服务器代码

server <- function(input, output) {
  
  df_products_upload <- reactive({
    inFile <- input$target_upload
    if (is.null(inFile))
      return(NULL)
    df <- read.csv(inFile$datapath, header = TRUE,sep = input$separator)
    return(df)
  })
  
  output$sample_table <- DT::renderDataTable({
    df <- df_products_upload()
    DT::datatable(df)
    
  })
  
  output$sample_map <- renderLeaflet({
    leaflet(data = df_products_upload()) %>%
      addProviderTiles(providers$OpenStreetMap.DE) %>%
      addMarkers(lng = ~Longitude, lat = ~Latitude)
     
  })  
}

【讨论】:

  • Puh,理解这种闪亮的反应性很棘手......一般来说,如果我不想参考上传,是否有一种方法可以将变量或数据帧定义为服务器内部的中间产品?
  • @Luke 是的,你构建了反应链
猜你喜欢
  • 2011-02-22
  • 1970-01-01
  • 2019-12-14
  • 2019-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-04
相关资源
最近更新 更多