R 在Julia中链接操作时显式指定参数

R 在Julia中链接操作时显式指定参数,r,julia,chaining,R,Julia,Chaining,使用DataFramesMeta.jl模块,可以使用以下方法在Julia中链接操作 using DataFrames, DataFramesMeta df = DataFrame(a = collect(1:5), b = ["a","b","c","d","e"]) @> begin df @where(:a .> 2) @select(:a, :b, c = :a*2) end # or: print( @linq df |> @wh

使用
DataFramesMeta.jl
模块,可以使用以下方法在Julia中链接操作

using DataFrames, DataFramesMeta
df = DataFrame(a = collect(1:5), b = ["a","b","c","d","e"])
@> begin
    df
    @where(:a .> 2)
    @select(:a, :b, c = :a*2)
end
# or:
print(
    @linq df |>
    @where(:a .> 2) |>
    @select(:a,:b, c = :a*2)
)

3x3 DataFrames.DataFrame
| Row | a | b   | c  |
|-----|---|-----|----|
| 1   | 3 | "c" | 6  |
| 2   | 4 | "d" | 8  |
| 3   | 5 | "e" | 10 |
其思想是,
df
是宏
@where
的第一个参数,整个
@where
语句作为第一个参数输入到
@select
宏中

然而,我们可能希望顶行成为第二个参数,或者我们可能希望在几个地方使用它。对于R用户(在R操作中,可以使用
%>%
)链接,
dplyr
包使用点(
)符号启用此功能,因此以下操作将起作用:

library(dplyr)
df = data.frame(a = 1:5, b = c("a","b","c","d","e"))
df %>% filter(a > 2) %>% mutate(c = nrow(.):1) %>% select(b,c) 

   b c
 1 c 3
 2 d 2
 3 e 1
我在寻找一种模仿R的点符号的方法,但不幸的是,点符号在Julia中不起作用,我在包文档中找不到任何关于这一点的东西


如果有人知道如何实现这一点,请告诉我们。

使用Lazy
时,
@as
宏允许您命名线程参数:

@as _ x f(_, y) g(z, _) == g(z, f(x, y))
使用
@as
宏,上述任务可以按如下方式完成:

julia> import Lazy.@as

julia> using DataFrames, DataFramesMeta

julia> df = DataFrame(a = collect(1:5), b = ["a","b","c","d","e"])
5x2 DataFrames.DataFrame
| Row | a | b   |
|-----|---|-----|
| 1   | 1 | "a" |
| 2   | 2 | "b" |
| 3   | 3 | "c" |
| 4   | 4 | "d" |
| 5   | 5 | "e" |

julia> @as _ df @where(_, :a .> 2) @select(_,:a, :b, c = :a*2)
3x3 DataFrames.DataFrame
| Row | a | b   | c  |
|-----|---|-----|----|
| 1   | 3 | "c" | 6  |
| 2   | 4 | "d" | 8  |
| 3   | 5 | "e" | 10 |

太好了,谢谢!这正是我想要的。