I noticed that sometimes the command 'cat' is ignored. Nothing is printed, even when 'cat' is followed by 'flush.console()'. I tried hard to create a reproducible example. The problem happens every single time I run certain functions, it is not intermittent. However, those functions are complex and depend on running other functions before them, so I cannot post the code here.
I tried four things trying to reproduce the problem:
- Put the call to 'cat' inside a function that is called by another function.
- Put the call to 'cat' inside a branch of an 'if' statement.
- Initiate a parallelized calculation immediately after the call to 'cat' because
cat
is ignored in similar circumstances in a bigger function I wrote. - Make the function being called return something a bit complicated, not just a scalar.
It did not work.
I see this problem quite frequently, and I believe other R programmers have seen it. I am running RStudio 1.4.1717 and the problem happens both under Windows 10 Pro and Kubuntu Linux.
Here is the code I used to unsuccessfully try to reproduce the problem:
library(pbmcapply)
my.list <- as.list(1:1e03)
my.fun <- function(x) {
y <- x^2 + 2
data.frame(Y = rep(y, 1000), Z = 1L)
}
some.value <- 1
ignore.fun <- function(n.cores) {
if (some.value == 1) {
cat("Why am I not being ignored?\n")
flush.console()
pbmclapply(my.list, my.fun,
mc.style = "ETA", mc.substyle = NA,
mc.cores = n.cores,
ignore.interactive = TRUE,
mc.preschedule = TRUE, mc.set.seed = TRUE,
mc.cleanup = TRUE, mc.allow.recursive = TRUE) -> value
} else {
value <- NULL
}
value
}
ignore2.fun <- function(x) {ignore.fun(x)}
ignore2.fun(8L) -> ifun
# Why am I not being ignored?
# |=======================| 100%, Elapsed 00:01