一个打印的函数如何能够在不返回打印内容的值和不使用for循环的情况下重复调用?
我最近写了一个打印的函数如何能够在不返回打印内容的值和不使用for循环的情况下重复调用?,r,sapply,R,Sapply,我最近写了for(I in 1:100){foo(I,bar)}作为脚本中的最后一行。在本例中,foo的最后一行是对print的调用,我肯定不想看到foo的返回值。我只想要印刷品。这个for循环是有效的,但是在R中使用这样的循环感觉很不习惯。有没有更惯用的方法来实现这一点foo在被调用之前必须将每个i以1:100的比例分别取下,因此foo(1:100,bar)将不起作用 sapply(1:100,function(x)foo(x,bar))似乎更为惯用,但它为我提供了foo的返回值及其打印。我曾
for(I in 1:100){foo(I,bar)}
作为脚本中的最后一行。在本例中,foo
的最后一行是对print
的调用,我肯定不想看到foo
的返回值。我只想要印刷品。这个for循环是有效的,但是在R中使用这样的循环感觉很不习惯。有没有更惯用的方法来实现这一点foo
在被调用之前必须将每个i以1:100
的比例分别取下,因此foo(1:100,bar)
将不起作用
sapply(1:100,function(x)foo(x,bar))
似乎更为惯用,但它为我提供了foo
的返回值及其打印。我曾考虑过使用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"))```
foo您可以在base R中使用不可见
来抑制函数返回输出:
不可见(sappy(1:5,函数(x)foo(x,“丑陋”))
[1] “丑陋”
[1] “丑陋”
[1] “丑陋”
[1] “丑陋的”
[1] “丑陋”
您还可以使用purrr::walk
——它类似于sapply
,它在迭代值上执行函数,但默认情况下用不可见
包装:
purrr::walk(1:100,~foo(,“丑陋”))
我是否认为没有软件包就没有惯用的方法来实现这一点?我对tidyverse很熟悉,但我没想到会因为这么琐碎的事情而需要它。请参阅更新-还有不可见的。你能澄清一下这里的“惯用”是什么意思吗?代码美学是主观的,因此它可能有助于突出您所追求的内容(例如简洁、清晰、独立于软件包)。