for循环不打印预期结果

时间:2016-09-23 15:57:36

标签: r for-loop r-raster

我有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]
}

2 个答案:

答案 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