我想将一组函数应用于一个值并获取一组值作为输出。我在 help?> groupby
(DataFrames 包)中看到我们可以这样做:
> df |> groupby(:a) |> [sum, length]
> df |> groupby([:a, :b]) |> [sum, length]
但是我们可以这样做吗
> [sum, length](groupby([:a, :b]))
MethodError: objects of type Array{Function,1} are not callable
square brackets [] for indexing an Array.
eval_user_input(::Any, ::Base.REPL.REPLBackend) at ./REPL.jl:64
in macro expansion at ./REPL.jl:95 [inlined]
in (::Base.REPL.##3#4{Base.REPL.REPLBackend})() at ./event.jl:68
甚至
> [sum, length](1:5)
我期望的输出:
[15, 5]
最佳答案
是和否。(即是的,这是可能的,但不,不能使用该语法):
<小时/> 否:您在|>
中看到的语法并且 dataframes 不是通用语法。这就是 |>
的方式方法是为数据帧定义的。请参阅文件 grouping.jl
中的定义(第 377 行),您会看到它只是另一个函数的包装器,并且它被定义为接受一个函数或一个函数向量。
PS:请注意通用 |>
它将参数“管道”到函数中,只期望右侧有 1 个参数函数,并且与这个特定的“数据帧重载”方法关系不大。
一种简单的方法,例如将通过列表理解:
julia> a = [1 2 3;2 3 4];
julia> [f(a) for f in [sum, length, size]]
3-element Array{Any,1}:
15
6
(2,3)
或者使用map
:
julia> map( (x) -> x(a), [sum, length, size])
等等
<小时/> PS:如果您热衷于使用|>
为了实现这一点,显然你也可以这样做:
julia> a |> (x) -> [sum(x), length(x), size(x)]
但想必这违背了你想要做的事情的目的:)
子>关于function - julia lang - 如何将多个函数应用于一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40498500/