R 通过列表创建循环,并将输出添加到数据帧

R 通过列表创建循环,并将输出添加到数据帧,r,dataframe,polygon,raster,R,Dataframe,Polygon,Raster,我想循环浏览包含世界形状文件的国家名称列表,并创建每个国家的单个形状文件。然后,我希望对每个shapefile的光栅执行计算,并将结果强制到一个以国家名称作为ID变量的数据框中 我已经为一个国家成功地写了这篇文章,但我正在努力让它正确循环 liech.map <- world.polys[world.polys$NAME == "Liechtenstein",] plot(liech.map) rasters <- stack(raster_1, raster_2) rasters

我想循环浏览包含世界形状文件的国家名称列表,并创建每个国家的单个形状文件。然后,我希望对每个shapefile的光栅执行计算,并将结果强制到一个以国家名称作为ID变量的数据框中

我已经为一个国家成功地写了这篇文章,但我正在努力让它正确循环

liech.map <- world.polys[world.polys$NAME == "Liechtenstein",]
plot(liech.map)

rasters <- stack(raster_1, raster_2)
rasters.values <- extract(rasters, liech.map)
df <- as.data.frame(rasters.values)
var <- as.data.frame(weighted.mean(x=df$raster_1, w=df$raster_2, na.rm=TRUE))

所以首先,我们要创建一个要处理的列表
world.polys
似乎是一个data.frame或类似的,我们想把它变成一个命名列表


polys_by_country Hi Picko90,欢迎访问该网站。你能用一个更容易复制的例子来编辑你的文章吗?可以复制/粘贴并运行的东西将是理想的。如果您使用的包带有一些预加载的数据,这通常很容易。现在,我不清楚你操作的对象的结构,这使我很难回答。嗨,对不起,我是R的新手,所以我不太确定如何制作一个可复制的示例。。。!你可以看看。在您的示例中,我不知道
world.polys
是什么,或者
raster_1
raster_2
等等。请尝试发布一个包含足够代码的自包含示例,供人们运行。@Picko90,您可以参考。另外,相关:。你最小的,可复制的例子将大大增加你在这个网站上获得帮助的机会。谢谢。我已经更新了我原来的帖子,告诉大家我已经取得了多大的进步!好的-我编辑了我的答案!当然,手动操作是疯狂的:)想要循环的反应很好。一旦你意识到你可以自动化多少,你就再也不会回头了。请注意,我无法实际测试代码,因为您没有提供最小的可复制示例(特别是,
world.polys
graster
未定义)。编辑了一个输入错误:我们需要在各种地图功能中使用
polys\u by\u country
。再次感谢Antoine。直到发出“映射”命令为止。当我尝试运行它时,我得到错误“y[I,]中的错误”:无法从类型为“NULL”的对象获取插槽(“多边形”)。由于我在Stata的背景,我理解这里需要一个循环,但为此我需要使用R,我不太熟悉!
### leichenstein map
## 69.67 sec elapsed
tic()
LTU.map <- world.polys[world.polys$ISO3 == "LTU",]
rasters.values <- extract(rasters, LTU.map)
df <- as.data.frame(rasters.values)
rugged_LTU <- as.data.frame(weighted.mean(x=df$raster_1, w=df$raster_2, na.rm=TRUE))
var_LTU$iso3 <- "LTU"
rm(LTU.map)
toc()

# define master dataframe once
var_master <- var_LTU

### UK map
## 127.31 sec elapsed
tic()
GBR.map <- world.polys[world.polys$ISO3 == "GBR",]
rasters.values <- extract(rasters, GBR.map)
df <- as.data.frame(rasters.values)
rugged_GBR <- as.data.frame(weighted.mean(x=df$raster_1, w=df$raster_2, na.rm=TRUE))
var_GBR$iso3 <- "GBR"
var_master <- rbind(var_master, var_GBR)
rm(GBR.map)
toc()