我有一个情况,我需要在for循环函数中使用数据框。 在这种情况下,它是“高效”的,但请记住,数据库很小,并且循环中的迭代非常简单。但是,也许代码可能对某些具有类似条件的代码有用。
的for循环目的是使用光栅提取功能从五个位置(即5东京,纽约,圣保罗秀,瑟&墨西哥城),每个单元有各自的栅格网格。我有一个空间点数据库,在5个不同的位置分配了1000多个观测值,我需要从10个不同的栅格网格(每个位置有两个网格)提取信息。此外,对于后续分析,我不仅需要栅格值,还需要每个观测值的唯一ID。
制备的空间数据,其中包括以下任务之后:
- 导入点shape文件与readOGR功能(rgdap封装)
- 导入光栅文件与光栅功能(光栅包)
- 将来自同一位置的栅格堆叠成一个文件,具有功能堆栈(栅格封装)
这里与使用一个数据帧的环代码:每个位置
1.添加堆叠栅格到一个列表
raslist <- list(LOC1,LOC2,LOC3,LOC4,LOC5)
2.创建一个空数据帧,这将是输出文件
TB <- data.frame(VAR1=double(),VAR2=double(),ID=character())
3.设置循环功能
L1 <- seq(1,5,1) # the location ID is a numeric variable with values from 1 to 5
for (i in 1:length(L1)) {
dat=subset(points,LOCATION==i) # select corresponding points for location [i]
t=data.frame(extract(raslist[[i]],dat),dat$ID) # run extract function with points & raster stack for location [i]
names(t)=c("VAR1","VAR2","ID")
TB=rbind(TB,t)
}
填充'list'代替'data.frame',使之成为循环后'data.frame'。 – Roland
感谢罗兰,我是一个n00b,你能否详细说明一下?如何声明列表以及如何转换它? –