我想基于点击传单地图上的标记突出显示Shiny应用程序中的一行数据表.为此,我必须更改页面,如果选择了第46行,则转到第5页.
如果我不更改行顺序,它工作正常.
如果我重新排序行(例如在升序中val),我找不到转到与所选行对应的页面的方法.
我已经删除了dataTableProxy手册,但它没有帮助.
任何帮助将非常感激.
您可以运行的代码示例:
ui.R
library(shiny)
library(leaflet)
library(DT)
shinyUI(fluidPage(
mainPanel(
leafletOutput("Map"),
dataTableOutput("Table")
)
))
Run Code Online (Sandbox Code Playgroud)
server.R
library(shiny)
library(leaflet)
library(DT)
shinyServer(function(input, output) {
nbpts <- 50
center <- c(47,3)
ref <- 1:nbpts
lat <- rnorm(nbpts, center[1], 2)
lng <- rnorm(nbpts, center[2], 2)
val <- sin(lat+lng)
data <- data.frame(ref, lat, lng,val)
output$Table <- renderDataTable({
DT::datatable(data, selection = "single")
})
TableProxy <- dataTableProxy("Table")
output$Map <- renderLeaflet({
data_map <- leaflet(data) %>%
addTiles() %>%
addCircleMarkers(
lng=~lng,
lat=~lat,
layerId = ~ref,
radius = 4,
color = "purple",
stroke = FALSE,
fillOpacity = 0.5
)
data_map
})
observeEvent(input$Map_marker_click, {
clickId <- input$Map_marker_click$id
dataId <- which(data$ref == clickId)
TableProxy %>%
selectRows(dataId) %>%
selectPage(dataId %/% 10 + 1)
})
})
Run Code Online (Sandbox Code Playgroud)
对于行,您应该过滤ref数字和页码,您应该借助实际行号来计算.
这应该可以帮到你:
observeEvent(input$Map_marker_click, {
clickId <- input$Map_marker_click$id
dataTableProxy("Table") %>%
selectRows(which(data$ref == clickId)) %>%
selectPage(which(input$Table_rows_all == clickId) %/% 10 + 1)
})
Run Code Online (Sandbox Code Playgroud)
Upvote,因为这个问题非常有趣.
编辑: 为NicE提供动态表长度变量的提示,请参阅注释.
output$Table <- renderDataTable({
DT::datatable(data, selection = "single",options=list(stateSave = TRUE))
})
observeEvent(input$Map_marker_click, {
clickId <- input$Map_marker_click$id
dataTableProxy("Table") %>%
selectRows(which(data$ref == clickId)) %>%
selectPage(which(input$Table_rows_all == clickId) %/% input$Table_state$length + 1)
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1313 次 |
| 最近记录: |