【问题标题】:A problem with adding objects to a list in a loop在循环中将对象添加到列表的问题
【发布时间】:2019-04-13 11:12:27
【问题描述】:

如果不合适,请见谅。我检查了所有其他帖子,但无法解决。

我正在尝试将堆叠的栅格对象拆分到每个波段并将它们添加到如下列表中:

library(rgdal)
satImage <- "pla18_rgbn_ndvi_7stack_16bit.img"


x <- vector("list", 35)

for (i in 1:35) {

  psi <- raster(satImage, band = i)
  x[[i]] <- psi

}

但是它会生成如下列表:

> View(x)
> x
[[1]]
NULL

[[2]]
NULL

[[3]]
NULL

...

[[34]]
NULL

[[35]]
class       : RasterLayer 
band        : 35  (of  35  bands)
dimensions  : 13084, 18025, 235839100  (nrow, ncol, ncell)
resolution  : 3, 3  (x, y)
extent      : 581337, 635412, 4425114, 4464366  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=utm +zone=35 +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs 
data source : E:/betul/35bantli/pla18_rgbn_ndvi_7stack_16bit.img 
names       : pla18_rgbn_ndvi_7stack_16bit 
values      : 55, 65535  (min, max)

我想要列表中的所有其他 34 个乐队。我该如何解决这个问题?

【问题讨论】:

  • 忘记那个真的很愚蠢:(我改变了但问题没有解决
  • 请让您的示例可重现! ... raster() 来自哪个包?
  • @jogo 是的,我知道,但是如何创建可复制的图像,我真的不知道!它是 rgdal 包。
  • 至少给出一个示例图片的链接(使用服务器上传图片)。

标签: r list raster


【解决方案1】:

我想你要找的是这个

library(raster)
satImage <- "pla18_rgbn_ndvi_7stack_16bit.img"
s <- stack(satImage)
x <- as.list(s)

现在有示例数据:

f <- system.file("external/rlogo.grd", package="raster") 
s <- stack(f)
x <- as.list(s)

检查“乐队”号码

sapply(x, bandnr)
#[1] 1 2 3

如果您知道乐队的数量(在本例中为 3 个),那么您所做的应该可以工作(但上面更优雅):

f <- system.file("external/rlogo.grd", package="raster")
n <- 3    
x <- vector("list", n)
for (i in 1:n) {
    x[[i]] <- raster(f, band = i)
}

最后:您不提供上下文,但您最好创建一个 RasterStack(如上所示)或者更好的是 RasterBrick,而不是 RasterLayer 对象列表

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-09
    • 2015-08-29
    • 1970-01-01
    • 2010-11-13
    • 2023-03-23
    • 2018-05-19
    • 2016-03-17
    • 1970-01-01
    相关资源
    最近更新 更多