R将每个迭代结果存储在repeat {}

时间:2016-03-09 11:57:52

标签: r repeat

我是R的新人。

我试图通过使用R来模拟SMRA拍卖过程,这很大程度上取决于重复{},我预期的结果是我可以通过data.frame或矩阵形式存储每个重复{}阶段的输出,以及迭代次数。

到目前为止,我已经想出了这个。我试图使用包#34; xlsx"将输出存储到Excel工作表,但它没有按预期工作。

this is what I thought I could get

and this is what I actually get

install.packages("xlsx", dependencies=TRUE)
library(xlsx) #load the package

set.seed(777)

vA<-c(round(runif(6,min=0,max=100)))
vB<-c(round(runif(6,min=0,max=70)))
vC<-c(round(runif(6,min=0,max=80)))

v<-rbind(vA,vB,vC)
colnames(v )<-c("p1","p2","p3","p4","p5","p6")

bA<-c(NA,NA,NA,NA,NA,NA)
bB<-c(NA,NA,NA,NA,NA,NA)
bC<-c(NA,NA,NA,NA,NA,NA)
b<-rbind(bA,bB,bC)
colnames(b)<-c("p1","p2","p3","p4","p5","p6")

bdwnr<-c(NA,NA,NA)
wnprz<-c(NA,NA,NA)

LimPrz<-c((round(runif(1,1,100)*0.2,0)),
 (round(runif(1,1,70)*0.2,0)),
 (round(runif(1,1,80)*0.2,0))
 )

repeat{
 for(i in 1:nrow(b)){
  for(j in 1:ncol(b)){
   if(v[i,j]<LimPrz[i]){
     b[i,j]=0
   }else if(v[i,j]==LimPrz[i]){
    b[i,j]=v[i,j]
   }else if((floor(0.1*v[i,j]+LimPrz[i]))<v[i,j]){
    b[i,j]=(floor(0.1*v[i,j]+LimPrz[i]))
   }else{
    b[i,j]=v[i,j]
   }
  }
 }

 k<-max.col(b)
 for(i in 1:nrow(b)){
  wnprz[i]=(max(b[i,]))
   if(k[i]==1){
   bdwnr[i]="p1"
  }else if(k[i]==2){
   bdwnr[i]="p2"
  }else if(k[i]==3){
   bdwnr[i]="p3"
  }else if(k[i]==4){
   bdwnr[i]="p4"
  }else if(k[i]==5){
   bdwnr[i]="p5"
  }else{
   bdwnr[i]="p6"
  }
 }
 Round<-data.frame(LimPrz,b,bdwnr,wnprz)
      print(Round)
write.xlsx(Round,                 file="Round.xlsx",sheetName="RoundResults",row.names=TRUE,col.names=TRUE)
 for(i in 1:nrow(b)){
   if(max(b[i,])>=LimPrz[i]){
   LimPrz[i]=max(b[i,])+1
  }else{
   LimPrz[i]=LimPrz[i]
  }
 }
 if(sum(b)==0)break
}

非常感谢帮助。提前谢谢。

1 个答案:

答案 0 :(得分:0)

我不确定您的具体要求是什么,但请尝试这样的模式。您可以使用<div class="mdl-layout mdl-js-layout mdl-layout--fixed-header">替换外部循环,并将您写入的内容返回到工作表。结果将是一个表列表,然后您可以堆栈。

lapply