【问题标题】:Interpolated map of europe欧洲插值地图
【发布时间】:2013-01-16 14:30:57
【问题描述】:

我有一个关于使用 PC 轴构建插值地图的问题。我使用包maps 和akima 来绘制地图和插值。这是我的代码:

map<-read.table("RACES_GEOREF.txt", row.names=1)
x<-as.numeric(map[,1])
y<-as.numeric(map[,2])
z<-as.numeric(bca.res$li[,1])
x0<-seq(min(map[,1]), max(map[,1]), le=500)
y0<-seq(min(map[,2]), max(map[,2]),le=500)
z.hat<-interp(x, y, z, xo=x0, yo=y0, linear=FALSE, extrap=TRUE)
myGrid<-expand.grid(x0,y0)
temp<-map.where(database="world", x=myGrid[,1], y=myGrid[,2])
toKeep<-grep("France",temp, ignore.case=TRUE)
toRemove<-setdiff(1:length(z.hat$z), toKeep)
z.hat$z[toRemove]<-NA
image(z.hat)
map(add=TRUE, lwd=3)
contour(temp, add=TRUE)
dev.off()

在grep 部分,我只能为法国绘制插值地图,而我想为法国、德国、英国、瑞典、意大利和摩洛哥绘制。如何将这些国家添加到法国?

【问题讨论】:

    标签: r interpolation


    【解决方案1】:

    您可以尝试在正则表达式中使用 OR 运算符:

    toKeep<-grep("France|Germany|UK|Sweden|Italy|Morocco", temp, ignore.case=TRUE)
    

    如果我在这方面是正确的,那么您确实应该更改问题的标题,因为问题似乎与插值过程无关,而是与命名区域的选择有关。

    【讨论】:

      【解决方案2】:

      我相信使用 grep 您需要执行以下操作:

      toKeep<-c(grep("France",temp, ignore.case=TRUE),grep("Germany",temp, ignore.case=TRUE),grep("UK",temp, ignore.case=TRUE),grep("Sweden",temp, ignore.case=TRUE),grep("Italy",temp, ignore.case=TRUE),grep("Morocco",temp, ignore.case=TRUE))
      

      因为 grep 只返回名称匹配的向量中的位置。

      【讨论】:

      • Dwin 的解决方案要好得多,但我建议使用应用循环而不是仅仅重复命令,例如类似:sapply(c("France", "Germany", etc), grep, temp, ignore.case = TRUE).
      猜你喜欢
      • 2012-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-22
      • 1970-01-01
      • 1970-01-01
      • 2018-01-13
      • 1970-01-01
      相关资源
      最近更新 更多