我有14个Tiff格式的光栅文件,我想读取一系列像素的值(相同的文件位置)。但是,当我运行R代码时,预期的结果没有显示出来。你能告诉我为什么吗?
#set working directory#
path <- 'E:/TSL_VCF/Tiffs'
setwd(path)
#list tiff files in the working directory#
list.files(path, pattern = 'tif')
#count the number of tiff files#
mylist <- list.files(path, pattern = 'tif')
mylength <- length(mylist)
#get values for certain "location"#
for (i in 1:mylength){
myraster <- raster(mylist[i])
mymatrix <- as.matrix(myraster)
mymatrix[1,771]
}
答案 0 :(得分:2)
结果未打印
mymatrix[1,771]
位于“for”循环内。这个:
#set working directory#
path <- 'E:/TSL_VCF/Tiffs'
setwd(path)
#list tiff files in the working directory#
list.files(path, pattern = 'tif')
#count the number of tiff files#
mylist <- list.files(path, pattern = 'tif')
mylength <- length(mylist)
#get values for certain "location"#
for (i in 1:mylength){
myraster <- raster(mylist[i])
mymatrix <- as.matrix(myraster)
print(mymatrix[1,771])
}
应该有效。
但是,它不会将生成的数组存储在屏幕上的任何位置。
我建议您查看extract
包的raster
函数,以获得更好的解决方案。如果您使用以下内容预先构建rasterstack:
mystack <- stack(mylist)
你也可以避免循环文件,只需执行以下操作:
result <- extract(mystack, as.matrix(c(1,771), nrow = 1))
,你应该在“结果”变量中得到结果
HTH,
洛伦佐
HTH,
洛伦佐
答案 1 :(得分:1)
如果您希望R在循环中打印内容,则需要显式调用print。例如:
m = rnorm(10)
for (i in 1:10) m[i] # doesn't print
for (i in 1:10) print(m[i]) # print