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

标签 function dataframe group-by set julia

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

相关文章:

java - 按下回车按钮时删除换行功能Java

C、将文件的指针传递给函数

python - 在 Python 中添加两列

python - 如何根据从一个数据帧到另一个数据帧的 2 个键找到最接近的匹配项?

python - Pandas:从 JSON 文件检索嵌套数据

python - 如何使用pandas groupby向每个组添加一行?

python - 结合 groupby 并在 multiIndex DataFrames 中应用

javascript - Angularjs - $http 请求在函数内部不起作用

vb.net - VB .NET 共享函数如果同时调用多次

c# - 一个组内的 LINQ-to-objects 索引 + 用于不同的分组(又名 ROW_NUMBER 与 PARTITION BY 等效)