2010-10-19 7 views
5

Ho un list contenenti sei piazzole, fatte simili:Prevenire stampa() da emettere indici delle liste in R

voi=c('inadist','smldist','lardist') 

plist <- llply(voi, 
    function(v,df,s) { 
     list( 
      assign(
       paste(v,'.violin'), 
       bwplot(groupname~df[,which(colnames(df)==v)]|fCycle*fPhase, 
        data=df, 
        groups=groupname, col=rainbow(1), box.ratio=3, 
        main=paste('Distribution of ', v, ' by Treatment and Cycle'), 
        sub=s, xlab=v, panel=panel.violin)), 
      assign(
       paste(v,'.hexbin'), 
       hexbinplot(df[,which(colnames(df)==v)]~starttime|groupname, 
        data=df, xlab='Time(s)',main= paste('Distribution of ',v,' by Treatment'), 
        sub=s,ylab=v, aspect=0.5, colramp=redgrad.pal, layout=c(2,4))) 

      ) 
    },data,meta$exp_name) 

Se stampo lista, print(plist), le trame sono inviati al dispositivo grafica, allora gli indici sono in uscita per la console con conseguente questo:

[[1]] 
[[1]][[1]] 

[[1]][[2]] 


[[2]] 
[[2]][[1]] 

[[2]][[2]] 


[[3]] 
[[3]][[1]] 

[[3]][[2]] 

Perché io sto codifica una webapp, ho bisogno di controllare l'output su console piuttosto strettamente. Finora l'unico modo che può produrre le trame senza emettere gli indici è come questo:

for(p in plist) 
    for(i in p) 
     print(i) 

c'è un modo più efficiente di ottenere quello che mi serve?

+1

I cercherò di aiutarti ma puoi * p leasing * fornire un set di dati mockup autonomo? –

+0

@Dirk Eddelbuettel: Ho aggiunto un file prodotto usando 'save (plist, file = fn)' Grazie per avere un'occhiata. – dnagirl

risposta

5

Si può barare con capture.output:

dummy <- capture.output(print(plist)) 

o senza creare una nuova variabile

invisible(capture.output(print(plist))) 

A proposito, ad esempio riproducibile simile a questa:

require(lattice) 
plist <- list(
    list(bwplot(rnorm(10)),bwplot(rnorm(10))), 
    list(bwplot(rnorm(10)),bwplot(rnorm(10))), 
    list(bwplot(rnorm(10)),bwplot(rnorm(10))) 
) 
+0

Un esempio riproducibile dovrebbe impostare un seme, in primo luogo;) – Greg

+0

@Greg touché. Dovrei usare '1: 10';) – Marek

+0

+1 - buon trucco per la risposta e bel suggerimento per l'esempio riproducibile. –