2

我有一堆由光栅组成的

s<-stack(list of ASCI files)

我正在尝试执行此操作

df<-as.data.frame(c(s[[1]],s[[2]],s[[2]],s[["bathymetry"]]))

但我得到这个错误

Error in as.data.frame.default(x[[i]], optional = TRUE) : 
cannot coerce class "structure("RasterLayer", package = "raster")" to a data.frame

当我在单个栅格上执行此操作时,例如

df<-as.data.frame(s[[1]])

一切正常。但是我必须提取许多栅格并将它们组合在一个数据框中。我现在看到的唯一解决方案是单独提取它们然后组合它们,有更好的解决方案吗?我一次处理数百个栅格。

编辑:我还应该补充一点,这个函数进入一个循环,我只在每个循环上提取栅格的一个子集。

4

2 回答 2

5

或者使用...

data.frame( rasterToPoints( s ) )

之后删除不需要的列。

于 2013-09-02T17:29:06.347 回答
0

要将函数应用于列表的每个元素,应用族命令很有帮助:

lapply( s, as.data.frame ) 

这将返回一个 data.frames 列表。

要将其限制为仅包含您想要的元素,只需事先将其子集到一个较小的列表中。

s_small <- s[c(1,2,3,5)]
lapply( s_small, as.data.frame ) 
于 2013-09-02T16:26:51.607 回答