46

当我使用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

3 回答 3

60

使用invisible,例如:

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

您也可以将其包装lapply在函数中的调用周围以使其更整洁。

于 2012-10-20T03:33:52.030 回答
9

l_ply从 plyr使用:

library(plyr)
FUN <- function(x) {
    FUN2 <- function(z) message(z)
    l_ply(1:3, function(i) FUN2(paste(x, i)))
}
FUN("hello")
于 2012-10-22T23:08:53.970 回答
0

您可以使用普通的 ol' for 循环而不是lapply()

FUN <- function(x) {
  for (i in 1:3) {
    message(paste0(x, i))
  }
}
FUN("hello")
于 2020-07-27T19:02:39.423 回答