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

通过第二个 for 循环的前两次,您将使用带有表达式的负索引

NEE[ , i-3]

这将返回一个 10 列矩阵,并删除第二列。下一次迭代将返回另一个 10 列矩阵,并删除第一列。负索引删除 R 中矩阵或数据帧的部分

于 2013-01-19T17:14:36.607 回答