假设我有两个列表:
temp<-c("con.sin.results","sin.results","exp.results")
Temp<-c("[,1:16]","[,17:32]","[,33:48]","[,49:64]")
temp 中的每个变量包含1000个观察值和64个变量。我想要做的是创建一个双循环,以便我可以根据样本大小创建箱图(这样每个箱图将有16个盒子,按照 Temp ),即我会得到boxplot(con。 sin.results [,1:16]),然后boxplot(con.sin.results [,17:32])等。
考虑到这个目标,我已经达到以下目的:
for (l in temp){
for (L in Temp){
windows()
par(mfrow=c(2,2))
A<-noquote(paste(noquote(l),noquote(L),sep=""))
boxplot(A)
}
}
不幸的是,这给我一个错误:
x [floor(d)] + x [ceiling(d)]中的错误:二进制的非数字参数 操作
我哪里错了?我应该调整什么?
答案 0 :(得分:2)
如果我理解你的问题,这或多或少都是你想要的:
bplotforone<-function(mat, groups=list(1:16, 17:32, 33:48, 49:64), newwin=TRUE, mfrow=c(2,2))
{
nr<-nrow(mat)
if(newwin) windows()
par(mfrow=mfrow)
for(curgroup in groups)
{
newres<-as.vector(mat[,curgroup])
newres<-data.frame(vals=newres, grp=rep(seq_along(curgroup), each=nr))
boxplot(vals~grp, data=newres)
}
}
con.sin.results2<-matrix(runif(10*64), ncol=64) #generated some test data here
bplotforone(con.sin.results2)
您现在可以轻松地执行以下操作:
listOfResults<-list(con.sin.results,sin.results,exp.results) #note: no quotes!!
for(curres in listOfResults) bplotforone(curres)
答案 1 :(得分:1)
这是我的主管提出的:
temp<-c("con.sin.results","sin.results","exp.results")
N<-c(50,100,250,500)
con.sin.results<-matrix(runif(100*64),100,64)
sin.results<-matrix(runif(100*64),100,64)
exp.results<-matrix(runif(100*64),100,64)
for (I in temp){
windows()
par(mfrow=c(2,2))
for (n in N){
if (n==50) eval(parse(text=paste("boxplot(",I,"[,1:16])",sep="")))
if (n==100) eval(parse(text=paste("boxplot(",I,"[,17:32])",sep="")))
if (n==250) eval(parse(text=paste("boxplot(",I,"[,33:48])",sep="")))
if (n==500) eval(parse(text=paste("boxplot(",I,"[,49:64])",sep="")))
}
}