停止从打印到控制台的lapply

时间:2012-10-20 03:29:36

标签: r

当我使用lapply并打印到控制台时,它会打印不需要的[[i]]NULL,但我希望将预期的消息打印到控制台。我已尝试suppressWarningssuppressMessages,但这些并未删除不受欢迎的罪犯。我搜查了lapply并且没有看到让它沉默的论据。这更美观,因为它不会干扰功能。只要用户可以根据需要关闭它,我就不会反对在控制台上进行替代打印。

这是一个示例函数,输出和我想要的内容:

示例功能:

FUN <- function(x) {
    FUN2 <- function(z) message(z)
    lapply(1:3, function(i) FUN2(paste(x, i)))
}

FUN("hello")

输出:

hello 1
hello 2
hello 3
[[1]]
NULL

[[2]]
NULL

[[3]]
NULL

期望输出:

hello 1
hello 2
hello 3

4 个答案:

答案 0 :(得分:45)

使用invisible,例如:

invisible(FUN("hello"))
hello 1
hello 2
hello 3

您也可以将其包裹在函数中的lapply调用中,以使其更加整洁。

答案 1 :(得分:7)

使用plyr的l_ply

library(plyr)
FUN <- function(x) {
    FUN2 <- function(z) message(z)
    l_ply(1:3, function(i) FUN2(paste(x, i)))
}
FUN("hello")

答案 2 :(得分:0)

我发现那里的答案(invisible(capture.output())更好地解决了我向控制台打印输出的问题, Suppress output of stationarity test that is printed to screen。同样在测试的背景下,expect_output非常有用。

答案 3 :(得分:0)

您可以使用普通的ol'for循环代替lapply()

FUN <- function(x) {
  for (i in 1:3) {
    message(paste0(x, i))
  }
}
FUN("hello")