适当的点()在fors循环使用多个地图

问题描述:

我想制作几个地图(每个物种的一个我的数据集),但不知何故,我无法实现我所期待的。适当的点()在fors循环使用多个地图

我想绘制其地图中的每个物种记录,但我只是为每个物体创建一个单点的地图......我不明白我的脚本有什么问题。你可以帮帮我吗?谢谢!

elevation <- getData("alt", country = "ES", mask=F) 
slope <- terrain(elevation, opt = "slope",neighbors=4) 
aspect <- terrain(elevation, opt = "aspect",neighbors=4) 
hill <- hillShade(slope, aspect, 40, 270) 
newextent<-extent(-7.99, -2.87, 39.9, 41.5) 
land.pal <- colorRampPalette(c("#336600", "#F3CA89", "#D9A627", 
           "#A49019", "#9F7B0D", "#996600", "#B27676", "#C2B0B0", "#E5E5E5", 
           "#FFFFFF"), space="Lab") (1000) 


for (i in seq_along(data$Species)) { 
    pdf(file=paste0("map ", data$Species[[i]],".pdf"), onefile=F) 
    plot(disaggregate(crop(elevation,newextent), 1, method="bilinear"), col = land.pal, legend=F) 
    points(data$Lat[[i]],data$Long[[i]], col="black") ##The error must be here, but I cannot fix it 
    dev.off() 
} 

预先感谢您

数据:

Lat Long Species 
-6.99 40.49 Sp1 
-5.05 40.60 Sp1 
-3.30 40.02 Sp1 
-7.51 40.86 Sp1 
-3.18 40.24 Sp1 
-3.83 40.08 Sp1 
-7.28 40.91 Sp1 
-7.74 40.53 Sp1 
-7.72 40.69 Sp1 
-4.36 40.06 Sp1 
-5.90 40.51 Sp2 
-5.56 40.07 Sp2 
-3.52 40.19 Sp3 
-6.29 40.93 Sp3 
-6.77 40.12 Sp3 
-7.11 40.77 Sp4 
-5.81 40.88 Sp4 
-5.27 40.68 Sp4 
-6.31 40.34 Sp4 
-6.13 40.32 Sp4 
-6.73 40.99 Sp4 
-5.32 40.71 Sp4 
-6.17 40.97 Sp4 
-4.77 40.92 Sp4 
-6.45 40.58 Sp5 
-5.54 40.39 Sp5 
-6.56 40.66 Sp5 
-5.27 40.37 Sp5 
+1

这恐怕是不可能没有数据来回答。请包括足够的问题,以使其可重现(使用'dput') –

+0

你好,感谢您的及时回复。现在查找编辑文章 –

目前,您通过您列的每一个值,而不是物种为一体的集团,你遍历通过纬度长一点,所以一行被传入for循环。

因此,考虑by切片您的数据帧的物种因子,迭代地传递每个切片的数据帧到一个函数。以下未显示,但by可以回到等于因子(S)的分组对象的命名列表这里是

by(data, data$Species, FUN = function(df) { 
    pdf(file=paste0("map ", df$Species[[1]],".pdf"), onefile=FALSE) 
    plot(disaggregate(crop(elevation,newextent), 1, method="bilinear"), col = land.pal, legend=FALSE) 
    points(df$Lat, df$Long, col="black") 
    dev.off() 
}) 
+0

谢谢!它绝对奏效! –

+0

太棒了!乐意效劳; 'by'是一个经常使用不足但非常有用的基本R函数。 – Parfait