@@ -45,7 +45,7 @@ Select(pairs::Pair{C,S}...) where {C<:Column,S<:AbstractString} =
45
45
46
46
Select () = throw (ArgumentError (" cannot create Select transform without arguments" ))
47
47
48
- isrevertible (:: Type{<:Select} ) = true
48
+ isrevertible (:: Type{<:Select} ) = false
49
49
50
50
# utils
51
51
_newnames (:: Nothing , select) = select
@@ -54,50 +54,12 @@ _newnames(names::Vector{Symbol}, select) = names
54
54
function applyfeat (transform:: Select , feat, prep)
55
55
cols = Tables. columns (feat)
56
56
names = collect (Tables. columnnames (cols))
57
-
58
- # retrieve relevant column names
59
57
select = transform. selector (names)
60
- reject = setdiff (names, select)
61
58
newnames = _newnames (transform. newnames, select)
62
-
63
- # keep track of indices to revert later
64
- sinds = indexin (select, names)
65
- rinds = indexin (reject, names)
66
-
67
- # sort indices to facilitate reinsertion
68
- sperm = sortperm (sinds)
69
-
70
- # rejected columns
71
- rcolumns = [Tables. getcolumn (cols, name) for name in reject]
72
-
73
- fcache = (select, sperm, reject, rcolumns, rinds)
74
59
newfeat = TableSelection (feat, newnames, select)
75
- newfeat, fcache
76
- end
77
-
78
- function revertfeat (:: Select , newfeat, fcache)
79
- cols = Tables. columns (newfeat)
80
- names = Tables. columnnames (cols)
81
- # https://github.com/JuliaML/TableTransforms.jl/issues/76
82
- columns = Any[Tables. getcolumn (cols, name) for name in names]
83
-
84
- select, sperm, reject, rcolumns, rinds = fcache
85
-
86
- # restore rejected columns
87
- onames = select[sperm]
88
- ocolumns = columns[sperm]
89
- for (i, rind) in enumerate (rinds)
90
- insert! (onames, rind, reject[i])
91
- insert! (ocolumns, rind, rcolumns[i])
92
- end
93
-
94
- 𝒯 = (; zip (onames, ocolumns)... )
95
- 𝒯 |> Tables. materializer (newfeat)
60
+ newfeat, nothing
96
61
end
97
62
98
- # reverting a single TableSelection is trivial
99
- revertfeat (:: Select , newfeat:: TableSelection , fcache) = newfeat. table
100
-
101
63
"""
102
64
Reject(col₁, col₂, ..., colₙ)
103
65
Reject([col₁, col₂, ..., colₙ])
@@ -129,19 +91,14 @@ Reject(cols::C...) where {C<:Column} = Reject(selector(cols))
129
91
Reject () = throw (ArgumentError (" cannot create Reject transform without arguments" ))
130
92
Reject (:: AllSelector ) = throw (ArgumentError (" cannot reject all columns" ))
131
93
132
- isrevertible (:: Type{<:Reject} ) = true
94
+ isrevertible (:: Type{<:Reject} ) = false
133
95
134
96
function applyfeat (transform:: Reject , feat, prep)
135
97
cols = Tables. columns (feat)
136
98
names = Tables. columnnames (cols)
137
99
reject = transform. selector (names)
138
100
select = setdiff (names, reject)
139
101
strans = Select (select)
140
- newfeat, sfcache = applyfeat (strans, feat, prep)
141
- newfeat, (strans, sfcache)
142
- end
143
-
144
- function revertfeat (:: Reject , newfeat, fcache)
145
- strans, sfcache = fcache
146
- revertfeat (strans, newfeat, sfcache)
102
+ newfeat, _ = applyfeat (strans, feat, prep)
103
+ newfeat, nothing
147
104
end
0 commit comments