1

假设我有一个列表data.frames

a1<-as.data.frame(1:9)
a2<-as.data.frame(2:10)
a3<-as.data.frame(3:11)

a.list<-list(a1,a2,a3)

现在我想将列表的每个 data.frame 转换为 3 x 3raster层。之后这些层应该在一个列表中。

我尝试使用 执行此lapply操作,但无法真正说出问题所在:

r.list<-lapply(a.list, raster(nrows=3, ncols=3))
4

2 回答 2

1

您可能需要先将数据帧转换为矩阵。利用您有 1 列数据帧的事实将它们转换为向量,然后使用该matrix函数:

> rl = lapply(a.list, function(X) raster(matrix(X[,1],nrow=3)))
> rl[[1]]
class       : RasterLayer 
dimensions  : 3, 3, 9  (nrow, ncol, ncell)
resolution  : 0.3333333, 0.3333333  (x, y)
extent      : 0, 1, 0, 1  (xmin, xmax, ymin, ymax)
coord. ref. : NA 
data source : in memory
names       : layer 
values      : 1, 9  (min, max)

您可能希望确保栅格是按行或按列构建的 - 使用byrowargmatrix来调整它,或转置矩阵或以其他方式排列它。

于 2013-08-21T16:02:11.227 回答
0

您的问题是您试图转换nrows=3为一个raster对象,然后将该新对象应用为对a.list.

你想要:

lapply(a.list, raster, nrows=3, ncols=3)

或者:

lapply(a.list, function(X) raster(X, nrows=3, ncols=3))
于 2013-08-21T15:19:34.670 回答