Очень простая работа для этой проблемы заключается в создании интерфейса Streamable<T>
, расширяющего Iterable<T>
, который содержит метод default <T> stream()
.
interface Streamable<T> extends Iterable<T> {
default Stream<T> stream() {
return StreamSupport.stream(spliterator(), false);
}
}
Теперь любой из ваших Iterable<T>
s могут быть тривиально сделаны потоковыми, просто объявив их implements Streamable<T>
вместо Iterable<T>
.
walk
по умолчанию передает входное значение в качестве первого не указанного аргумента функции, поэтому в вашем случае это приводит к вызову типа:
render_report(file = 4)
Чтобы избежать этого, укажите аргумент file
внутри walk
:
param_infos %>%
transpose() %>%
walk(render_report, file = "summary_cyl.Rmd")
Обратите внимание, что теперь file
является аргументом walk
, и он будет передан render_report
walk
.