我正在尝试在R中创建一个栅格矢量,让我解释一下。我正在处理数据(24个月、1月、jan2等,以及不同年份),并且,对于每个月(1月、jan2、2月、feb2等),我想创建一个栅格。
我是手工完成的,但它真的很长,我正在试着优化一下这段代码。我正在使用一个函数,并在这个函数中使用一个循环来创建我的栅格。但正如你想象的那样,它不起作用。我想按月自动创建我的栅格。
我现在已经这样做了(这里我只尝试了5个.tif文件):
library(sp)
library(raster)
library(stringr)
setwd(dir = "E:/perso/NEON-DS-Field-Site-Spatial-Data/SJER")
files_vec=list.files(path = "E:/perso/NEON-DS-Field-Site-Spatial-Data/SJER",full.names=FALSE, recursive=FALSE)
files_vec
month<-c("jan","jan2","fev","fev2","mar")
vec_of_raster<-c("raster",length(files_vec))
raster_vec<-function(vec_of_raster,files_vec,month,year_str)
{
for (i in seq(1,length(files_vec)))
{
vec_of_raster[i]<-(month[i]<-raster(files_vec[i]))
}
}
raster_vec(vec_of_raster,files_vec,month,"1995")我担心我想使用两个对象(光栅和矢量),它们要么以这种方式接近工作,要么不能关联。
下面是我得到的错误(和警告):
Error in .local(.Object, ...) :
In addition: Warning messages:
1: In month[i] <- raster(files_vec[i]) :
number of items to replace is not a multiple of replacement length
2: In vec_of_raster[i] <- (month[i] <- raster(files_vec[i])) :
number of items to replace is not a multiple of replacement length
3: In month[i] <- raster(files_vec[i]) :
number of items to replace is not a multiple of replacement length
4: In vec_of_raster[i] <- (month[i] <- raster(files_vec[i])) :
number of items to replace is not a multiple of replacement length
5: In month[i] <- raster(files_vec[i]) :
number of items to replace is not a multiple of replacement length
6: In vec_of_raster[i] <- (month[i] <- raster(files_vec[i])) :
number of items to replace is not a multiple of replacement length
7: In month[i] <- raster(files_vec[i]) :
number of items to replace is not a multiple of replacement length
8: In vec_of_raster[i] <- (month[i] <- raster(files_vec[i])) :
number of items to replace is not a multiple of replacement length
9: In month[i] <- raster(files_vec[i]) :
number of items to replace is not a multiple of replacement length
10: In vec_of_raster[i] <- (month[i] <- raster(files_vec[i])) :
number of items to replace is not a multiple of replacement length
Error in .rasterObjectFromFile(x, band = band, objecttype = "RasterLayer", :
Cannot create a RasterLayer object from this file. (file does not exist)我没有得到这些错误信息,如果你能帮助我,或者你有相同或类似的问题,我接受任何提示!
发布于 2018-03-20 01:49:40
在您的循环中,您可能应该使用双括号[[ ]]
但您可以使用stack (如果栅格可以堆叠-它们需要具有相同的范围和分辨率),或者使用lapply。如有必要,请处理后面的名称。
library(raster)
# example file for reproducibility
f <- system.file("external/test.grd", package="raster")
ff <- rep(f, 3)
s <- stack(ff)
s
#class : RasterStack
#dimensions : 115, 80, 9200, 3 (nrow, ncol, ncell, nlayers)
#resolution : 40, 40 (x, y)
#extent : 178400, 181600, 329400, 334000 (xmin, xmax, ymin, ymax)
#coord. ref. : +init=epsg:28992 +towgs84=565.237,50.0087,465.658,-0.406857,0.350733,-1.87035,4.0812 +proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +units=m +no_defs
#names : test.1, test.2, test.3
#min values : 128.434, 128.434, 128.434
#max values : 1805.78, 1805.78, 1805.78 如果你真的想要一个列表(或者不能创建一个RasterStack)
x <- lapply(ff, raster)
names(x) <- basename(extension(ff, ""))https://stackoverflow.com/questions/49368590
复制相似问题