I'm looking to suppress the output of one command (in this case, the apply
function).
Is it possible to do this without using sink()
? I've found the described solution below, but would like to do this in one line if possible.
I'm looking to suppress the output of one command (in this case, the apply
function).
Is it possible to do this without using sink()
? I've found the described solution below, but would like to do this in one line if possible.
It isn't clear why you want to do this without sink
, but you can wrap any commands in the invisible()
function and it will suppress the output. For instance:
1:10 # prints output
invisible(1:10) # hides it
Otherwise, you can always combine things into one line with a semicolon and parentheses:
{ sink("/dev/null"); ....; sink(); }
invisible()
only suppresses the print of an expression, it is not a sink()
one-liner. –
Dote apply
, as per the question: invisible(apply(matrix(1:10), 1, as.numeric))
. –
Koan { sink("/dev/null"); ....; sink(); }
I would definitely prefer capture.output
, as capture.output
effectively does exactly above, just a lot better (have a look at the source, it calls sink as in above fashion, plus some nice stuff around it). –
Bartlett idw
function under Windows. I think the best solution is using sink
–
Yongyoni Use the capture.output()
function. It works very much like a one-off sink()
and unlike invisible()
, it can suppress more than just print messages. Set the file
argument to "/dev/null"
on UNIX or "NUL"
on windows, or, better, use nullfile()
(>= 3.6.0) for platform independence. If you need to support R< 3.6, use R.utils::nullfile()
. For example, considering Dirk's note:
> invisible(cat("Hi\n"))
Hi
> capture.output(cat("Hi\n"), file = nullfile())
>
capture.output(x <- log(2))
and afterwards x
has the value of log(2)
... –
Industrialist nullfile()
in your code is probably cleaner than platform-specific nullfile()/NUL ? –
Gravely suppressMessages
to hide it completely –
Prudenceprudent The following function should do what you want exactly:
hush=function(code){
sink("NUL") # use /dev/null in UNIX
tmp = code
sink()
return(tmp)
}
For example with the function here:
foo=function(){
print("BAR!")
return(42)
}
running
x = hush(foo())
Will assign 42 to x but will not print "BAR!" to STDOUT
Note than in a UNIX OS you will need to replace "NUL" with "/dev/null"
suppressMessages()
–
Jelsma R only automatically prints the output of unassigned expressions, so just assign the result of the apply
to a variable, and it won't get printed.
print()
or cat()
in them that goes to the screen, not to an assignment. –
Dillard you can use 'capture.output' like below. This allows you to use the data later:
log <- capture.output({
test <- CensReg.SMN(cc=cc,x=x,y=y, nu=NULL, type="Normal")
})
test$betas
In case anyone's arriving here looking for a solution applicable to RMarkdown, this will suppress all output:
```{r error=FALSE, warning=FALSE, message=FALSE}
invisible({capture.output({
# Your code goes here
2 * 2
# etc
# etc
})})
```
The code will run, but the output will not be printed to the HTML document
Making Hadley's comment to an answer: Use of apply family without printing is possible with use of the plyr
package
x <- 1:2
lapply(x, function(x) x + 1)
#> [[1]]
#> [1] 2
#>
#> [[2]]
#> [1] 3
plyr::l_ply(x, function(x) x + 1)
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))
produces output without NULL at the end of the line or on the next line
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
Here is a version that is robust to errors in the code to be shushed:
quietly <- function(x) {
sink("/dev/null") # on Windows (?) instead use `sink("NUL")`
tryCatch(suppressMessages(x), finally = sink())
}
sink
. –
Loose sink
. This answer updates the accepted answer to avoid a pitfall arising if an error occurs in the code the answer is applied to. –
Hermineherminia sink
it will be marked as duplicate even though this question does not have an answer here. –
Loose If you're wondering how to suppress a warning()
you can use suppressWarnings()
like so:
suppressWarnings(warning("hi"))
Whereas these two will still show the warning:
invisible(warning("Hi"))
# shows 'Hi'
capture.output(warning("Hi"), file='NUL')
# shows 'Hi'
for the return(something) part inside an R function:
return(invisible(something))
works ok
invisible(return(something))
does not work at all
© 2022 - 2024 — McMap. All rights reserved.
capture.output
. Or use*_ply
from the plyr package. – Wattslapply
, without printing output then 'l_ply` from hisplyr
package is probably the most appropriate choice. – Nawab