0

私はリストアーカイブを掘り下げました、そして私はこの質問をするための正しい言葉を知らないか、これは前に出てきませんでした-

ポイントのリストを経時的に追跡するシミュレーション機能があり、割り当てに基づいて余分なラグ計算を導入したいと考えています。Rが行列をどのように埋めるかを理解するために、非常に簡単なコードを作成しました。

t<-21    #time step
N<-10    #points to track
#creating a matrix where it's easy for me to see how the calculation is done
NEE<-rep(NA, (t+1)*N);dim(NEE)<-c(N,(t+1))
for(i in 1:t){
    NEE[,1]<-1
    NEE[,i+1]<-NEE[,i]+5
}

#the thing to calculate
gt<-rep(0, (t+1)*N);dim(gt)<-c(N,(t+1))
#assigned states
veg<-c(rep(0,5), rep(1,5))
veg.com<-rep(veg, t);dim(veg.com)<-c(N,t)

for (i in 1:t){
    gt[,i+1]<-ifelse(veg.com[,i]==0, NEE[,i]/5, NEE[,i-3]/5)
}
#to have a view of what happens
veg1<-gt[1,]*5      #assignment for veg.com==0
veg2<-gt[10,]*5     #assignment for veg.com==1
what<-cbind(NEE[1,], veg1,veg2)
what

もちろん、veg.com == 1のときにラグが有効になる前に、最初のビット(ここでは、veg2の最初の4つの値として示されています)を埋める方法を除いて、機能します。回避策があると確信していますが、最初に、最初のいくつかのループでRが何をしているのかを理解したいだけですか?

4

1 に答える 1

0

その 2 番目の for ループの最初の 2 回は、次の式で負のインデックスを使用します。

NEE[ , i-3]

これにより、2 列目が削除された 10 列の行列が返されます。次の反復では、最初の列が削除された別の 10 列の行列が返されます。負のインデックスは、R の行列またはデータフレームの一部を削除します

于 2013-01-19T17:14:36.607 に答える