我正在做一个地图项目,并在传单地图(闪亮的应用程序)中绘制了两个标记数据集。一个数据集比另一个大,我正在绘制连接多到少的大圆弧。一切正常。我将 R 从 3.5 更新到 3.6,现在我得到“如果错误:缺少 TRUE/FALSE 需要的值”,我已将其隔离到运行大圆弧的 for 语句中。
硬编码到 gcIntermediate() 中的值可以工作,但我只能有 1 个固定弧。使用值创建一个新的数据框是可行的,但是从我导入的数据构建的 data.frame 不再有效。
# inside server.R
output$MapNet <- renderLeaflet({
leaflet() %>%
addTiles(
urlTemplate = "http://mt0.google.com/vt/lyrs=m&hl=en&x={x}&y={y}&z={z}&s=Ga",
attribution = 'Google'
) %>%
setView(lng = -93.85, lat = 37.45, zoom = 5)
})
NetData <- data.frame(PRgps.lon = c(-83.35300,-82.52681,-82.31592,-82.91263,-83.61500,-82.73041,-82.73041,-82.73041,-82.73041,-82.73041),
PRgps.lat = c(42.97400, 45.46538, 45.45996, 45.40823, 45.25417, 45.51366, 45.51366, 45.51366, 45.51366, 45.51366),
JCgps.lon = c(-82.68287,-81.63665,-81.96928,-81.96928,-81.96928,-82.92507,-81.96928,-82.61287,-81.06040,-81.63665),
JCgps.lat = c(45.68083, 45.66951, 45.58777, 45.58777, 45.58777, 45.24366, 45.58777, 45.68083, 44.65540, 45.66951),
popup = c("A", "P", "M", "M", "J ", "M", "M", "M", "M", "M")
)
arcbuilder(NetData, MapNet)
# Inside global.R
arcbuilder <- function(NetData, MapNet){
for (i in 1:nrow(NetData)) {
arc <- as.data.frame(gcIntermediate(c(NetData[i,]$PRgps.lon, NetData[i,]$PRgps.lat),
c(NetData[i,]$JCgps.lon, NetData[i,]$JCgps.lat),
n = 100, addStartEnd = TRUE ))
MapNet <- MapNet %>%
addPolylines(lat = arc$lat,
lng = arc$lon,
color = "green",
weight = 2,
popup = NetData[i,]$popup)
}
}
上面的代码有效,作为 NetData 提供的数据是导入的 NetData 的 head(10)。num 和 chr 方面与单独留在该庄园中时的正确文件相同。当我不硬输入它并将 100 行数据输入 for 循环时,我收到警告:如果错误:需要 TRUE/FALSE 的缺失值。更具体地说,我得到:
Warning: Error in if: missing value where TRUE/FALSE needed
48: .interm
47: gcIntermediate
45: arcbuilder [C:\Users\me\Documents\GitHub\Network_Map/global.R#193]
44: <observer> [C:\Users\me\Documents\GitHub\Network_Map/server.R#136]
1: runApp
第 136 行是在 server.R 中调用 arcbuilder() 的地方,第 193 行是在 global.R 中的 arcbuilder() 中使用 gcIntermediate() 的地方
最后,当将整个 NetData data.frame 运行到带有地图设置以在闪亮之外工作的 arcbuilder 函数中时,它运行没有错误。我检查了来自 NA 或其他异常的数据,我有理由相信没有任何数据。
我错过了什么?