gpt4 book ai didi

function - julia lang - 如何将多个函数应用于一个值

转载 作者:行者123 更新时间:2023-12-02 19:05:17 25 4
gpt4 key购买 nike

我想将一组函数应用于一个值并获取一组值作为输出。我在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com