如何在不返回打印内容且没有 for 循环的情况下重复调用打印的函数?

How can a function which prints be called repeatedly without returning the value of what was printed and without a for loop?

我最近写了 for(i in 1:100){foo(i,bar)} 作为脚本的最后一行。在这种情况下,foo 的最后一行是对 print 的调用,我绝对不想看到 foo 的 return 值。我只想要打印。这个 for 循环有效,但在 R 中使用这样的循环感觉很不习惯。有没有更习惯的方法来实现这个? foo 必须在调用之前单独获取每个 i in 1:100,因此 foo(1:100,bar) 将不起作用。

sapply(1:100,function(x) foo(x,bar)) 似乎更惯用,但它给了我 foo 的 return 值及其打印。我曾考虑过使用 do.call,但不得不使用 as.list(1:100) 让我感到恶心。我有什么选择?

最小示例:

foo<-function(i,bar)
{
  print(paste0("alice",i,bar,collapse = ""))
}
for(i in 1:100){foo(i,"should've used cat")}
sapply(1:100,function(x) foo(x,"ugly output"))```

您可以在 base R 中使用 invisible 来抑制函数 return 输出:

invisible(sapply(1:5, function(x) foo(x, "ugly")))

[1] "alice1ugly"
[1] "alice2ugly"
[1] "alice3ugly"
[1] "alice4ugly"
[1] "alice5ugly"

您也可以使用 purrr::walk - 它类似于 sapply,因为它对迭代值执行一个函数,但默认情况下用 invisible 包装:

purrr::walk(1:100, ~foo(., "ugly"))