Присоединение к спискам, а затем создание коробок - PullRequest
1 голос
/ 12 октября 2011

Допустим, у меня есть два списка:

temp<-c("con.sin.results","sin.results","exp.results")
Temp<-c("[,1:16]","[,17:32]","[,33:48]","[,49:64]")

Каждая из переменных в temp содержит 1000 наблюдений и 64 переменных.То, что я пытаюсь сделать, это создать двойной цикл, чтобы я мог создавать блокпосты на основе размера выборки (чтобы каждый блокпост имел 16 блоков в соответствии с Temp ), то есть я бы получил блокпост (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 [потолок (d)]: не числовой аргумент для двоичногооператор

Куда я иду не так?Что я должен настроить?

Ответы [ 2 ]

2 голосов
/ 12 октября 2011

Если я правильно понимаю ваш вопрос, это более или менее то, что вы хотите:

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 голос
/ 13 октября 2011

Вот что придумал мой руководитель:

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="")))
  }
}
...