- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 20 万行的数据集,其中包含出发地和目的地的坐标。我有一个带有传单 map 的 R shiny 应用程序,可以在这些坐标上显示圆圈,尽管有大量坐标,但效果很好。
这是数据的简化示例。每行包含旅行id、出发地经纬度、目的地经纬度。
id lat_begin lat_end lng_begin lng_end
1 1 46.49 46.27 2.65 7.66
2 2 45.94 49.24 7.94 0.76
3 3 48.07 49.50 2.05 2.61
4 4 46.98 48.94 0.80 5.76
5 5 46.94 48.82 7.36 6.40
6 6 47.37 48.52 5.83 7.00
现在我的目标是在每个出发地和目的地之间添加线路,即 20 万条线路。
我在 1000 行样本上尝试了几个想法,但它总是花费太多时间,显示 200k 行需要几个小时。
addPolylines 函数上的 for 循环
library(dplyr)
library(shiny)
library(leaflet)
n = 1000 # small number of lines
data_dots = data.frame(id = 1:n,
lat_begin = round(runif(n,45,50),2),
lat_end = round(runif(n,45,50),2),
lng_begin = round(runif(n,0,8),2),
lng_end = round(runif(n,0,8),2))
ui <- fluidPage(
leafletOutput("map")
)
server <- function(input, output) {
# Initiate the map
output$map <- renderLeaflet({
myMap = leaflet() %>%
addTiles(options = providerTileOptions(noWrap = TRUE)) %>%
setView(lng=3.07381,lat=45.7829,zoom=5) %>%
# add dots
addCircles(data = data_dots, ~c(lng_begin,lng_end) , ~c(lat_begin,lat_end),
stroke=FALSE, fillOpacity = 0.7)
# add lines
for(i in 1:n){
myMap = myMap %>%
addPolylines(data = data_dots[i,],
lng= ~ c(lng_begin, lng_end),
lat= ~ c(lat_begin, lat_end),
color = 'blue',
weight = 1)
}
myMap
# also tried with apply
# lapply(data_dots$id,
# function(x) {
# addPolylines(myMap,
# data = data_dots[data_dots$id == x, ],
# lng = ~c(lng_begin, lng_end),
# lat = ~c(lat_begin, lat_end),
# color = 'blue',
# weight = 1)
# })
# myMap
})
}
shinyApp(ui = ui, server = server)
创建空间线对象
library(dplyr)
library(shiny)
library(leaflet)
library(maptools)
library(sp)
n = 1000
data_dots = data.frame(id = 1:n,
lat_begin = round(runif(n,45,50),2),
lat_end = round(runif(n,45,50),2),
lng_begin = round(runif(n,0,8),2),
lng_end = round(runif(n,0,8),2))
begin <- data_dots %>%
select(id, lat_begin, lng_begin) %>%
rename(latitude = lat_begin, longitude = lng_begin)
end <- data_dots %>%
select(id, lat_end, lng_end) %>%
rename(latitude = lat_end, longitude =lng_end)
data_lines = bind_rows(begin, end)
# make data_lines a spatialdataframe
coordinates(data_lines) <- c('longitude', 'latitude')
# create a list per id
id_list <- sp::split(data_lines, data_lines[['id']])
id <- 1
#for each id, create a line that connects all points with that id
for ( i in id_list ) {
event.lines <- SpatialLines( list( Lines( Line( i[1]@coords ), ID = id ) ),
proj4string = CRS( "+init=epsg:4326" ) )
if ( id == 1 ) {
sp_lines <- event.lines
} else {
sp_lines <- spRbind( sp_lines, event.lines )
}
id <- id + 1
}
ui <- fluidPage(
leafletOutput("map")
)
server <- function(input, output) {
# Initiate the map
output$map <- renderLeaflet({
myMap = leaflet() %>%
addTiles(options = providerTileOptions(noWrap = TRUE)) %>%
setView(lng=3.07381,lat=45.7829,zoom=5) %>%
# add dots
addCircles(data = data_dots, ~c(lng_begin,lng_end) , ~c(lat_begin,lat_end),
stroke=FALSE, fillOpacity = 0.7) %>%
# add lines
addPolylines(data = sp_lines)
})
shinyApp(ui = ui, server = server)
1000 行,每个案例需要几秒钟。我可以用 200k 行快速添加圆圈,但最大的问题是添加行。
最佳答案
为什么要使用 for 循环遍历每一行而不是一次绘制整个数据框?这已经快多了,但是有 200k 行,渲染仍然会“慢”。
output$map <- renderLeaflet({
myMap = leaflet() %>%
addTiles(options = providerTileOptions(noWrap = TRUE)) %>%
setView(lng=3.07381,lat=45.7829,zoom=5) %>%
# add dots
addCircles(data = data_dots, ~c(lng_begin,lng_end) , ~c(lat_begin,lat_end),
stroke=FALSE, fillOpacity = 0.7) %>%
addPolylines(data = data_dots,
lng= ~ c(lng_begin, lng_end),
lat= ~ c(lat_begin, lat_end),
color = 'blue',
weight = 1)
myMap
})
也许 mapview
可能对此有所帮助,因为它曾经有一个处理大型数据集的函数 (addLargeFeatures
) 并且在内部使用了相当多的 C++。
我认为该功能已消失,现在有望在 addFeatures
中实现。这应该比使用纯传单要快一些。
library(dplyr)
library(shiny)
library(leaflet)
library(mapview)
library(sf)
n = 10000 # small number of lines
data_dots = data.frame(id = 1:n,
lat_begin = round(runif(n,45,50),2),
lat_end = round(runif(n,45,50),2),
lng_begin = round(runif(n,0,8),2),
lng_end = round(runif(n,0,8),2))
ui <- fluidPage(
leafletOutput("map")
)
server <- function(input, output) {
# Initiate the map
output$map <- renderLeaflet({
data_dots_sf_begin <- data_dots %>%
st_as_sf(coords=c("lng_begin", "lat_begin"))
data_dots_sf_end <- data_dots %>%
st_as_sf(coords=c("lng_end", "lat_end"))
data_dots_sf <- st_combine(cbind(data_dots_sf_begin, data_dots_sf_end)) %>%
st_cast("LINESTRING")
st_crs(data_dots_sf) <- 4326
leaflet() %>%
addTiles(options = providerTileOptions(noWrap = TRUE)) %>%
addFeatures(data = data_dots_sf,
color = 'blue',
weight = 1)
})
}
shinyApp(ui = ui, server = server)
关于r - Shiny 的传单添加大量分离的多段线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53813758/
我正在通过 Rscript.exe 在托管到我的本地网络的服务器上运行 Shiny 应用程序。如果我们要将其移植到网上,我们可以通过我们设置的服务器基础设施来实现。 Shiny Server 是否添加
当我运行我的 Shiny 应用程序时,我的数据表的标题向左移动。见下文。 假设这张表在选项卡 A 上。 当我单击不同的选项卡(选项卡 B)时,标题会正确对齐,然后再次单击选项卡 A。有关更正的标题,请
是否有查询正在运行的 RStudio Shiny 网页以显示正在运行的服务器版本的变量或方法?例如。显示类似 shiny-0.10.1在网页上。 有任何想法吗? 最佳答案 您可以使用 packageV
我想在以下位置重现示例:https://scip.shinyapps.io/scip_app/ 基本上,我有一个 300 x 300 调整后的相关矩阵和一个 300 x 300 未调整的相关矩阵,我想
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 去年关闭。 社区去年审查了是否重
在我部署应用程序时,应用程序中仍然存在一些异常情况,因此我想将它们从我的帐户中删除。我试过了,但没有找到任何选择。任何帮助将不胜感激。谢谢 最佳答案 在从 shiny.io 填充 token 信息后,
据我了解,Shiny Server 的开源版本不支持身份验证。 我们有一个环境使用 WebSEAL 代理服务来验证用户并将他们的访问引导到 Web 应用程序。 我们希望向经过身份验证的用户公开 Shi
我想将一个 R 应用程序(在装有 OS RHEL6.8 的实际 Shiny 服务器上运行良好)转移到另一个"new" Shiny 服务器。我的应用程序在第一台服务器上运行良好。这个想法是将它放在性能更
我正在通过 #RMarkdown 创建一个测试页面并尝试在其中添加 #Shiny 内容。在编织到 HTML 时,我收到以下错误。 Error in appshot.shiny.appobj(list(
有没有一种简单的方法可以在 shiny 中创建这样的东西? 最佳答案 RStudio 目前正在处理 sortable 包:RStudio/sortable 请注意,它目前正在开发中(标记为实验性),因
当我在一个非常简单的 Shiny 应用程序中按下操作按钮时,我试图调用另一个 Shiny 的应用程序。另一个应用程序位于一个带有 ui.R 和 server.R 文件的名为 Benefits 的文件夹
我最近试图在我的服务器上打开一个 Shiny 的服务器应用程序,并遇到了我以前从未见过的错误。 Error in loadNamespace(j -c "R -e \"install.pack
我有 Shiny 的应用程序,它显示旧数据(延迟 4 天!),但服务器数据已刷新(当天)。 奇怪的是,服务器上不存在旧数据集 - 似乎只存在于 Shiny 缓存中。 在服务器上,我有 1 个数据集由
我有一个在本地 R 服务器(端口 8787)上运行的应用程序。当我将它移动到 Shiny Server(端口 3838)时,我收到消息 ERROR: An error has occurred. Ch
我试图消除此表格与浏览器窗口左侧之间的空间,但当我这样做时,它弄乱了导航栏链接和标题的间距。 如何在不改变 navbar/ui/li 元素的填充/边距的情况下删除 excelR 表上的填充/边距? l
我已经阅读并实现了来自 link 的 Shiny 表中的复选框.但是当我在 R 中运行时,列中的输出是 , 等在每个“选择”单元格中,我希望“选择”列中的输出是复选框,我的问题的解决方案是什么?谢谢
我一直在开发一个 Shiny 的应用程序,它开始变得相当大。 我通过将应用程序的不同部分放入各自文件中的模块中解决了这个问题,然后获取文件。 问题是,当我在源文件的服务器部分(下例中的 events.
我对 Shiny 和 DataTables 还很陌生,所以这可能是个愚蠢的问题。由于某种原因,我无法更改列宽。我试过了 output$table<-DT::renderDataTable( {w
我安装了我的 Shiny 服务器,它在这个目录下的多个应用程序上工作正常: /srv/ Shiny 服务器/app1/srv/ Shiny 服务器/app2 我可以使用 www.mydomain.co
我想在我的 Shiny 应用程序中包含我的 myMardown.md 文档。 为了显示目录,我使用了 toc 选项,还使用了 css (myStyle.css) myMarkdown.md : ---
我是一名优秀的程序员,十分优秀!