将for循环中每个迭代的行编译为R中的数据帧时的列顺序切换

将for循环中每个迭代的行编译为R中的数据帧时的列顺序切换,r,dataframe,for-loop,raster,R,Dataframe,For Loop,Raster,我试图通过for循环对多个站点进行采样,每个站点都有一个光栅堆栈,并将每个采样添加到一个数据帧中。我尝试堆叠光栅,创建一个数据帧,并在将其添加到列表之前随机采样。然后在循环之外,我将列表编译成一个数据帧。 但是,当我运行代码时,第一次迭代有列(X,Y,raster1,raster2),而其余的迭代将列顺序切换为(raster1,raster2,X,Y)。如何在每次迭代中使列处于相同的位置 此外,当使用聚合版本的光栅(2m分辨率)测试循环时,效果良好。我只得到更高分辨率(2厘米分辨率)的问题 ra

我试图通过for循环对多个站点进行采样,每个站点都有一个光栅堆栈,并将每个采样添加到一个数据帧中。我尝试堆叠光栅,创建一个数据帧,并在将其添加到列表之前随机采样。然后在循环之外,我将列表编译成一个数据帧。 但是,当我运行代码时,第一次迭代有列(X,Y,raster1,raster2),而其余的迭代将列顺序切换为(raster1,raster2,X,Y)。如何在每次迭代中使列处于相同的位置

此外,当使用聚合版本的光栅(2m分辨率)测试循环时,效果良好。我只得到更高分辨率(2厘米分辨率)的问题


raster1嗨,我没有看到任何跳出的bug。添加调试代码。例如,在流程的不同点添加
print(names(stack.df))
,以缩小范围并识别有问题的代码。错误可能是这一行
stack.df谢谢你的建议@M.Viking我把它缩小到这一行,
stack.df嗨,我没有看到任何跳出的错误。添加调试代码。例如,在流程的不同点添加
print(names(stack.df))
,以缩小范围并识别有问题的代码。bug可能是这一行
stack.df谢谢你的建议@M.Viking我把它缩小到这一行
stack.df
raster1 <- raster("ras1.tif")
raster2.list <- list("./ras2a.tif", "./ras2b.tif", "./ras2c.tif", "./ras2d.tif")
names(raster2.list) <- c("ras2a", "ras2b", "ras2c", "ras2d")

#name all variables in for loop
siteID <- list("ras2a", "ras2b", "ras2c", "ras2d")                 

#Create master list
master.list = list()

#For loop
for (i in raster2.list) {

  #import raster
  ras2 <- raster(i)
  print("imported ras2...")
  
  #match ras1 projection, resolution and extent to ras2 raster
  ras1 <- projectRaster(raster1,                                                      #original raster
                            ras2,                                                     #raster with desired projection, resolution, and extent
                            method = "bilinear")
  print("reprojected ras1 to ras2...")
  
  #stack rasters
  stack.ras <- stack(ras2, ras1)
  print("stacked rasters...")
  
  #convert stack to df, remove NA rows...
  set.seed(100)
  stack.df <- as.data.frame(stack.ras, na.rm = T, xy=T)
  stack.df <- stack.df[sample(nrow(stack.df),100),]
  colnames(stack.df)[c(1,2)] <- c("ras2","ras1")
  print("converted raster stack to dataframe and sampled random points...")
  print("adding stack to list...")
  
  #add each site iteration to list
  master.list[[i]] <- stack.df
  print("Done!")
}

#turn master list into df with all sites by row
master.df <- data.table::rbindlist(master.list, use.names=FALSE)
master.df <- as.data.frame(master.df)