我是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
}
非常感谢帮助。提前谢谢。
答案 0 :(得分:0)
我不确定您的具体要求是什么,但请尝试这样的模式。您可以使用<div class="mdl-layout mdl-js-layout mdl-layout--fixed-header">
替换外部循环,并将您写入的内容返回到工作表。结果将是一个表列表,然后您可以堆栈。
lapply