2016-11-27 20 views
0

これは非常に基本的な質問ですが、私はどこでも直接答えを見つけることはできません。私の実際のコードは、空間ポリゴンデータフレームのリストに対していくつかの計算を実行し、計算されたメトリックをあらかじめ割り当てられた行列にスロットすることです。私の問題は、ループの後に再び行列を呼び出すと、まだ空です。私はこの問題を維持するおもちゃのコードを作成しました。行列を行単位で塗りつぶすR

#create the columns to be filled 
empty<-matrix(,nrow=4,ncol=3) 
colnames(empty)<-c("NF", "PF", "AA") 

lapply(1:4, function(x){ 
    NF<-2 
    #Proportion of forest 
    PF<- 4 
    #Average fragment area 
    AA<- 6 
    #plug them into my awaiting columns 
    empty[x,]<-c(NF, PF, AA) 
}) 

head(empty) 

戻り

 NF PF AA 
[1,] NA NA NA 
[2,] NA NA NA 
[3,] NA NA NA 
[4,] NA NA NA 
+0

'empty'は' lapply'呼び出しの範囲内でのみ更新され、決して返されません。したがって、あなたの地球環境に保存されている '空の'は何も変わりません。あなたの 'lapply'を明示的な' for'ループに変更すれば、うまくいくはずです。 – thelatemail

+0

'マトリックス(c(2,4,6)、4,3、TRUE、リスト(NULL、c(" NF "、" PF "、" AA "))) – rawr

+0

ゴルフマトリックス(1:3 * 2 (NF = 2、PF = 4、AA = 6))[rep({{}、{}}、{ (1,4)、] – rawr

答えて

0

問題は、あなたが動作しないlapply内のマトリックスに記入していることです。あなたは代わりに行うことができます:

l <- lapply(1:4, function(x){ 
    NF<-2 
    PF<- 4 
    AA<- 6 
    c(NF, PF, AA) 
}) 

m <- matrix(unlist(l), ncol = 3, byrow = T) 
colnames(m) <- c("NF", "PF", "AA") 

#  NF PF AA 
#[1,] 2 4 6 
#[2,] 2 4 6 
#[3,] 2 4 6 
#[4,] 2 4 6 

ループ内でマトリックスを成長させない方が効率的です。

関連する問題