如何在不返回打印内容且没有 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"))
我最近写了 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"))