我有个问题:我需要在另一个函数中一遍又一遍地运行同一个函数,但参数不同,我如何直接实现它,因为我目前使用的手动方法会产生大量代码,使代码无法阅读?
伪代码:
internal_func <- function(x, y, z)
external_func <- function(list_of_functions) {
# do some stuff
for(i in 1:length(list_of_functions)){
# evaluate the internal function and save the results in a matrix
}
# do some more stuff
return(stuff)
}
# run 1
# generate list of internal_func with varying x and pass it to external_func
# run 2
# generate list of internal_func with varying y and pass it to external_func
# run 3
# generate list of internal_func with varying y and pass it to external_func
先谢谢你!
2条答案
按热度按时间ogq8wdun1#
只是猜测什么可能对你有用发现很难从你的伪代码中猜测出来......不管怎样,这里有一些小代码,它们制造了一个函数列表,每个函数都有一个不同的参数(这会改变它们将生成多少数字);这些被传递到对它们的结果进行操作的外部函数
mitkmikd2#
我不确定我是否正确理解了您的问题,但据我所知,这是解释应用函子的好方法,所以我用Scala编写了一些代码。
应用函子具有
ap
函数,其签名如下:def ap[A, B](ff: F[A => B])(fa: F[A]): F[B]
F是一个函子,就像
List
一样,实际上List
是一个应用函子!所以我们可以写:
序言:
cats为我们提供了
List
的应用示例,以及类型别名,所以接下来我们有了很好的代码:结果不是很清楚,我相信它可以改进,但是我们的想法是前3个条目是f(x,y,z)变化一个变量,后3个条目是g(x,y,z)变化一个变量。
它甚至可以在一次执行中完成,将所有变体设置在一起,但是对于这个解释来说,阅读并不那么清楚。
我希望它符合你的问题!内联的
ap
将取代你的for循环,这样你仍然可以在前后做一些事情。