我是R语言的初学者,并且对包含高程模型的大型栅格图层(Barrow_DEM.tif,2,5GB)有一些疑问。另外,还有一个包含10个多边形的形状文件(Barrow_DTLB.shp),我想从中获取栅格的高程数据。这两个文件具有相同的空间扩展以及正确的坐标,投影等。
`setwd("...")
Barrow_DEM <- raster("Barrow_DEM.tif")
Barrow_DTLB <- st_read("Barrow_DTLB.shp")
Barrow_DTLB_Buffer <- st_read("Barrow_DTLB_BufferOUT.shp")
Barrow_lake <- crop(Barrow_DEM, extent(Barrow_DTLB))
raster_lake <- rasterize(Barrow_DTLB, Barrow_lake, mask = TRUE)
summary(raster_lake)`
结果如下:
summary(raster_lake)
layer
Min. 0
1st Qu. 2
Median 3
3rd Qu. 8
Max. 12
NA's 0
Warning message:
In .local(object, ...) :
summary is an estimate based on a sample of 1e+05 cells (0.02% of all cells)
直方图的结果如下:
hist(raster_lake, col=rgb(0,0,1,0.5), breaks=100, ylab= "Frequency", xlab= "Height", main= "Histogram DTLB Barrow")
Warning message: In .hist1(x, maxpixels = maxpixels, main = main, plot = plot, ...) :
0% of the raster cells were used (of which 92% were NA). 7651 values used
我已经在这里的另一个讨论中尝试过此方法,但是它没有帮助我。
replaceNA <- function(x, na.rm, ...){
if(is.na(x[1]))
return(0)
else
return(x)
}
raster_lake <- calc(raster_lake, fun = replaceNA)
似乎新的raster_lake文件中位于多边形外部的所有数据值都获得了NA值。如何摆脱这些NA? 我想获取所有直方图的完整直方图以及一些统计数据,例如中值,均值,最小值,最大值以及分别为每个多边形。
答案 0 :(得分:0)
如果我很好理解,您希望在删除NA的同时计算栅格值的直方图。
您可以提取栅格值,删除NA并制作值的直方图:
require(raster)
require(sp)
require(gstat)
# load some data and make a raster object
data(meuse.grid)
meuse.grid <- data.frame(x =meuse.grid$y , y =meuse.grid$x , val = meuse.grid$dist)
coordinates(meuse.grid) <- ~x+y
gridded(meuse.grid) <- T
meuse.grid <- raster(meuse.grid)
# get the values from the raster, remove the NA's and make an histogram
hist(na.omit(getValues(meuse.grid)))
如果您的数据集很大并且需要太多的RAM(R中常见),则可以创建一个ff对象向量,将数据存储在磁盘上:
require(ff)
# create a ff object from the vector or the raster values (NA's are included)
val.Ras <- ff(getValues(meuse.grid))
# you can use this ff object as any other R vector files
hist(val.Ras[,3])
# check that it takes less memory
object.size(val.Ras)
64944 bytes
object.size(getValues(meuse.grid))
3168 bytes
对象尺寸减小了95%!
答案 1 :(得分:0)
ff选项将不起作用,因为首先执行了getValues()或values()。您仍然会用完内存。我认为您唯一的选择是将大型栅格划分为图块,使用预定义的中断计算每个图块的直方图,然后合并图块直方图。或者获得一台具有更多RAM的计算机!
答案 2 :(得分:0)
您可以尝试:
<c:forEach
<c:forEach items="${options}" var="option">
<form:input path="option.mcq"/>
</c:forEach>