@@ -47,29 +47,38 @@ function preprocess(transform::Filter, feat)
47
47
end
48
48
49
49
function applyfeat (:: Filter , feat, prep)
50
- # collect all rows
51
- rows = Tables. rowtable (feat)
52
-
53
50
# preprocessed indices
54
51
sinds, rinds = prep
55
52
56
- # select/reject rows
57
- srows = view (rows , sinds)
58
- rrows = view (rows , rinds)
53
+ # selected/rejected rows
54
+ srows = Tables . subset (feat , sinds, viewhint = true )
55
+ rrows = Tables . subset (feat , rinds, viewhint = true )
59
56
60
57
newfeat = srows |> Tables. materializer (feat)
61
58
62
59
newfeat, (rinds, rrows)
63
60
end
64
61
65
62
function revertfeat (:: Filter , newfeat, fcache)
66
- # collect all rows
67
- rows = Tables. rowtable (newfeat )
63
+ cols = Tables . columns (newfeat)
64
+ names = Tables. columnnames (cols )
68
65
69
66
rinds, rrows = fcache
70
- for (i, row) in zip (rinds, rrows)
71
- insert! (rows, i, row)
67
+
68
+ # columns with selected rows
69
+ columns = map (names) do name
70
+ collect (Tables. getcolumn (cols, name))
71
+ end
72
+
73
+ # insert rejected rows into columns
74
+ rrcols = Tables. columns (rrows)
75
+ for (name, x) in zip (names, columns)
76
+ r = Tables. getcolumn (rrcols, name)
77
+ for (i, v) in zip (rinds, r)
78
+ insert! (x, i, v)
79
+ end
72
80
end
73
81
74
- rows |> Tables. materializer (newfeat)
82
+ 𝒯 = (; zip (names, columns)... )
83
+ 𝒯 |> Tables. materializer (newfeat)
75
84
end
0 commit comments