我想基于点击传单地图上的标记突出显示Shiny应用中的一行数据表。为此,我必须更改页面,如果选择了第46行,则转到第5页。
如果我不更改行顺序,它可以正常工作。
如果我对行重新排序(例如在升序val
上),我找不到转到与所选行对应的页面的方法。
我有ckecked the dataTableProxy manual,但没有帮助。
非常感谢任何帮助。
您可以运行的代码示例:
ui.R
library(shiny)
library(leaflet)
library(DT)
shinyUI(fluidPage(
mainPanel(
leafletOutput("Map"),
dataTableOutput("Table")
)
))
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)
})
})
答案 0 :(得分:6)
对于行,您应该过滤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)
})
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)
})