从具有不同形状的不同光栅文件中提取RGB值

从具有不同形状的不同光栅文件中提取RGB值,r,loops,rgb,R,Loops,Rgb,我有一个包含50个不同光栅文件和50个不同形状文件的数据集。光栅文件是来自森林的正射影像,每个正射影像都有一个属于它的形状文件,其中树的形状文件用点标记。 现在我想用for循环提取皇冠的RGB值。 到目前为止,我编写了一个普通for循环,但问题是我只有一个迭代器,但实际上我需要两个(一个用于shapefile列表,一个用于正射影像列表)。我还尝试了嵌套for循环,但问题是一个shapefile与所有正射影像一起分析,因此以前的数据总是被覆盖 这是我的嵌套循环代码: library(rgd

我有一个包含50个不同光栅文件和50个不同形状文件的数据集。光栅文件是来自森林的正射影像,每个正射影像都有一个属于它的形状文件,其中树的形状文件用点标记。 现在我想用for循环提取皇冠的RGB值。 到目前为止,我编写了一个普通for循环,但问题是我只有一个迭代器,但实际上我需要两个(一个用于shapefile列表,一个用于正射影像列表)。我还尝试了嵌套for循环,但问题是一个shapefile与所有正射影像一起分析,因此以前的数据总是被覆盖

这是我的嵌套循环代码:

    library(rgdal)
    library(rgeos)
    library(exactextractr)
    library(sp)
    library(sf)
    library(raster)


    #gets list of shapefiles
    sites <- list.files("C:/Users/Kai/OneDrive - UT Cloud/Documents/Praktikum Mitacs/Data Files/ManualTreetops_2019_RGB/ManualTreetops_Finished",pattern = "*.shp")

    #removes ".shp" file extension
    sites <- sub(".shp","",sites)

    orths <-  list.files("C:/Users/Kai/OneDrive - UT Cloud/Documents/2019_ortho",pattern="*.tif", full.names = TRUE)

    output <- list()

    #loops through list of files
    for (i.site in sites) {


    #each time through i.site represents a different site
    tt <- st_read("C:/Users/Kai/OneDrive - UT Cloud/Documents/Praktikum Mitacs/Data Files/ManualTreetops_2019_RGB/ManualTreetops_Finished", i.site)

    #create 1 m radius circles around each treetop
    crowns <- st_buffer(tt, 1)


    for(i.orth in orths) {

        setwd("C:/Users/Kai/OneDrive - UT Cloud/Documents/2019_ortho")

        oo <-  brick(i.orth)

        #extracts the mean band values for each crown
        #much faster than extract in raster package
        crown.rgb <- exact_extract(oo,crowns,"mean")


       }

      output[[i.site]] <- crown.rgb
      #add results to list of output from for loop

    } #end of for loop
库(rgdal)
图书馆(rgeos)
图书馆(ExactExtractor)
图书馆(sp)
图书馆(sf)
图书馆(光栅)
#获取形状文件列表

站点您可以指定
for
-循环来迭代数字1到50,然后从那里将
站点
或其
子集:
for(沿(站点)顺序排列的i){i.site这能回答你的问题吗?谢谢你的快速回复。你能再详细解释一下你的意思吗?我真的不明白我应该用什么方式来子集
站点
或其
,以及为什么我应该迭代1到50次。对不起,我是R的初学者…好的,对于给你带来的不便,我想是我问题的答案!非常感谢,我应该能够实现它。不用担心,您做了很好的尝试!基本上,
for
-循环在某个向量上迭代并应用“body”(for
-循环的
中的代码)你所做的,是直接迭代
站点
。然而,你想同时迭代
站点
orth
,从两者中获取相同的元素。基本上,你想要
站点[1]
orth[1]
,然后是
站点[2]
orth[2]
,等等……因此,我们只需将
for
-循环写入1到50(整个
站点的长度
orths
),然后将
sites[i]
orths[i]
写入正文。我希望这有意义!