我已经在列表档案中挖掘了,要么我不知道要问这个问题的正确的话还是之前没有提出 -
我有一个模拟功能,我会跟踪一段时间内的点列表,并希望根据作业引入额外的滞后计算。我已经创建了一个非常简单的代码来理解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
当然它有效,除了它在填充第一位(在这里显示为veg2中的前4个值)之前,当veg.com == 1时滞后有效。我确定有工作,但我首先只是想了解R在最初的几个循环中做了什么?
答案 0 :(得分:0)
通过第二个for循环的前两次,您将使用带有表达式
的负索引NEE[ , i-3]
这将返回10列矩阵,删除第2列。下一次迭代将返回另一个10列矩阵,删除第一列。负指数删除R
中矩阵或数据帧的部分