2013-08-21 57 views
1

的名單比方說,我有data.frames列表:R:轉換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×3 raster層。之後這些圖層應該在列表中。

我試圖用lapply執行這一點,但真的不能告訴是什麼問題:

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

回答

1

你可能需要轉換您dataframes第一個矩陣。利用這一點,你有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) 

您可能希望確保柵格正在建設中按行或按列 - 使用byrow參數matrix來調整它,或轉置矩陣或以其他方式排列它。

+0

這適用於3乘3「光柵」。因爲我想將它用於不同的維度,所以我已經爲更一般的情況修改瞭解決方案:'rl = rl = lapply(a.list,function(X)matrix(X,nrow = 3,ncol = 3)) '然後:'rl = lapply(rl,function(X)raster(X))'' –

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)) 
+0

你真的試過這段代碼嗎?因爲它不適合我。沒有使用的參數(nrows = 3,ncols = 3)' – Spacedman

+0

然後問題出現在'raster'中,而不僅僅是OP使用'lapply' –

+0

不,問題在於'lapply'調用'raster' list元素作爲參數,'raster'不會將其轉換爲nrows x ncols柵格,這是記錄的。 – Spacedman