【问题标题】:Expected result is not printed for a for loop没有为 for 循环打印预期结果
【发布时间】:2016-09-23 15:57:35
【问题描述】:

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

【问题讨论】:

    标签: r for-loop r-raster


    【解决方案1】:

    因为指令不打印结果

    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 函数以获得更好的解决方案。如果您使用类似的东西预先构建一个光栅堆栈:

    mystack <- stack(mylist)
    

    您还可以避免循环文件,只需执行以下操作:

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

    ,你应该在“result”变量中得到结果

    HTH,

    洛伦佐

    HTH,

    洛伦佐

    【讨论】:

      【解决方案2】:

      如果您希望 R 在循环中打印内容,则需要显式调用 print。例如:

      m = rnorm(10)
      for (i in 1:10) m[i] # doesn't print
      for (i in 1:10) print(m[i]) # print
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多