分类光栅图像在R中提取信息循环
我有800个分类光栅图像(7类)和每一个从一个图像类需要以平方米计算。到目前为止,它只适用于一个图像,而不适用于循环。我能做些什么来解决它分类光栅图像在R中提取信息循环,r,loops,for-loop,classification,r-raster,R,Loops,For Loop,Classification,R Raster,我有800个分类光栅图像(7类)和每一个从一个图像类需要以平方米计算。到目前为止,它只适用于一个图像,而不适用于循环。我能做些什么来解决它 report_files<-list(list of 800 tif files) for( i in report_files){ reportfiles_single<-raster(report_files[i]) df<-as.data.frame(table(reportfiles_single)) df2&l
report_files<-list(list of 800 tif files)
for( i in report_files){
reportfiles_single<-raster(report_files[i])
df<-as.data.frame(table(reportfiles_single))
df2<-as.data.frame(df$Freq*(0.070218*0.070218))
{report_mean<- df2}
}
报告文件您的循环不正确。您确实为(报表文件中的i)使用了{
,但后来您使用了i
,就好像您为(报表文件中的i:length)使用了{
在循环中,您可以使用table(reportfiles\u single)
,而在工作代码示例中,等效的是table(values(reportfiles\u single))
此外,在每次迭代中覆盖report\u mean
时,您不会保留任何结果
所以你应该从学习循环的工作原理开始,首先做一些简单的例子
另外,您确定数据的空间分辨率约为7×7厘米吗?这是可能的,但似乎不太可能
下面是一个您可能会做的示例。我使用freq
方法,因为它是内存安全的,不像table(values())
库(光栅)
f您能否提供一个可能包含3幅图像的可复制示例,并向我们提供您的数据?如果我们可以尝试在我们的机器上运行,则更容易探索问题。谢谢:)
a<-raster("test060707.tif")
val<-values(a)
table_val<-data.frame(val)
df<-as.data.frame(table(table_val))
df2<-as.data.frame(df$Freq*(0.070218*0.070218))
library(raster)
f <- system.file("external/test.grd", package="raster")
report_files <- c(f, f, f)
res <- list()
for( i in 1:length(report_files)){
r <- raster(report_files[i])
# note the -2 for this example, you probably do not want that with your data
f <- freq(r, digits= -2)
cellsize <- prod(res(r))
f[,2] <- f[,2] * cellsize
res[[i]] <- f
}
s <- stack(report_files)
x <- freq(s, digits=-2)