2016-09-23 68 views
0

我有Tiff格式的14个光栅文件,我想读取一系列像素(相同文件位置)的值。但是,当我运行R代码时,预期结果并未显示出来。你能告诉我为什么吗?预期结果不打印for 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) 
    mymatrix[1,771] 
} 

回答

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 
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]) 
} 

应该工作。

但是,它不会将结果数组存储在屏幕上的任何地方。 我建议你看看raster包的extract功能,以获得更好的解决方案。如果你使用像事先建立一个rasterstack:

mystack <- stack(mylist) 

您也可避免遍历文件,只是这样做:

result <- extract(mystack, as.matrix(c(1,771), nrow = 1)) 

,你应该在“结果得到的结果“可变

HTH,

洛伦佐

HTH,

Lorenzo