2010-04-27 23 views
58

Sto cercando di sopprimere l'output del comando uno (in questo caso, la funzione apply).Soppressione dell'output di un comando in R

È possibile farlo senza utilizzare sink()? Ho trovato la soluzione descritta di seguito, ma vorrei farlo in una riga, se possibile.

How to suppress output

+1

Può spiegare che cosa si intende per 'fare questo in linea'? Altrimenti la domanda che citi fornisce già la risposta e questo è un duplicato. –

+0

Questa soluzione richiede tre righe, un output di reindirizzamento, il comando e un altro per riattivare l'uscita. – Tor

+0

È ancora una domanda doppia. –

risposta

67

Non è chiaro il motivo per cui si vuole fare questo senza sink, ma si può avvolgere tutti i comandi nella funzione invisible() e sarà eliminare l'output. Per esempio:

1:10 # prints output 
invisible(1:10) # hides it 

In caso contrario, si può sempre combinare le cose in una sola riga con un punto e virgola e parentesi:

{ sink("/dev/null"); ....; sink(); } 
+4

Prova 'invisible (cat ("Hi \ n"))' - 'invisible()' sopprime solo la stampa di un'espressione, non è un 'sink '(sink)' one-liner. –

+2

Giusto, ma penso che soddisfi le esigenze del questionario, a meno che non manchi qualcosa nella domanda ... – Shane

+1

Ad esempio, questo sopprime il ritorno di "applica", come da domanda: 'invisibile (applica (matrice (1:10), 1, as.numeric)) '. – Shane

9

R solo stampa automaticamente l'output di espressioni non assegnati, quindi basta assegnare il risultato della apply a una variabile e non verrà stampato.

42

Utilizzare la funzione capture.output(). Funziona molto come un sink() unico ea differenza di invisible(), può sopprimere più di una semplice stampa dei messaggi. Impostare l'argomento del file su /dev/null su UNIX o NUL su Windows. Ad esempio, considerando la nota di Dirk:

> invisible(cat("Hi\n")) 
Hi 

> capture.output(cat("Hi\n"), file='NUL') 
> 
+7

non funziona se si desidera applicarlo a una funzione che restituisce un valore e si desidera utilizzare questo valore – TMS

+5

@TMS È cambiato qualcosa durante gli ultimi mesi? Ho appena testato per utilizzare il valore restituito da una funzione e ha funzionato ... 'capture.output (x <- log (2))' e in seguito 'x' ha il valore di' log (2) '... – drmariod

5

è possibile utilizzare 'capture.output' come di seguito. Questo consente di utilizzare i dati in seguito:

log <- capture.output({ 
    test <- CensReg.SMN(cc=cc,x=x,y=y, nu=NULL, type="Normal") 
}) 

test$betas 
0
invisible(cat("Dataset: ", dataset, fill = TRUE)) 
invisible(cat(" Width: " ,width, fill = TRUE)) 
invisible(cat(" Bin1: " ,bin1interval, fill = TRUE)) 
invisible(cat(" Bin2: " ,bin2interval, fill = TRUE)) 
invisible(cat(" Bin3: " ,bin3interval, fill = TRUE)) 

produce uscita senza NULL alla fine della linea o nella riga successiva

Dataset: 17 19 26 29 31 32 34 45 47 51 52 59 60 62 63 
Width: 15.33333 

Bin1: 17 32.33333 
Bin2: 32.33333 47.66667 
Bin3: 47.66667 63