@@ -23,56 +23,66 @@ assertions(::LogRatio) = [scitypeassert(Continuous)]
2323
2424function applyfeat (transform:: LogRatio , feat, prep)
2525 cols = Tables. columns (feat)
26- onames = Tables. columnnames (cols)
27- varnames = collect (onames)
26+ names = Tables. columnnames (cols)
27+ vars = collect (names)
28+
29+ # perform closure for full revertibility
30+ cfeat, ccache = apply (Closure (), feat)
2831
2932 # reference variable
30- rvar = refvar (transform, varnames)
31- _assert (rvar ∈ varnames, " invalid reference variable" )
32- rind = findfirst (== (rvar), varnames)
33+ rvar = refvar (transform, vars)
34+ _assert (rvar ∈ vars, " invalid reference variable" )
35+
36+ # reference index
37+ rind = findfirst (== (rvar), vars)
3338
3439 # permute columns if necessary
35- perm = rind ≠ lastindex (varnames )
40+ perm = rind ≠ lastindex (vars )
3641 pfeat = if perm
37- popat! (varnames , rind)
38- push! (varnames , rvar)
39- feat |> Select (varnames )
42+ popat! (vars , rind)
43+ push! (vars , rvar)
44+ cfeat |> Select (vars )
4045 else
41- feat
46+ cfeat
4247 end
4348
4449 # apply transform
4550 X = Tables. matrix (pfeat)
4651 Y = applymatrix (transform, X)
4752
4853 # new variable names
49- newnames = newvars (transform, varnames )
54+ newnames = newvars (transform, vars )
5055
5156 # return same table type
5257 𝒯 = (; zip (newnames, eachcol (Y))... )
5358 newfeat = 𝒯 |> Tables. materializer (feat)
5459
55- newfeat, (rind , perm, onames )
60+ newfeat, (ccache , perm, rind, vars )
5661end
5762
5863function revertfeat (transform:: LogRatio , newfeat, fcache)
64+ # retrieve cache
65+ ccache, perm, rind, vars = fcache
66+
5967 # revert transform
6068 Y = Tables. matrix (newfeat)
6169 X = revertmatrix (transform, Y)
62-
63- # retrieve cache
64- rind, perm, onames = fcache
70+ pfeat = (; zip (vars, eachcol (X))... )
6571
6672 # revert the permutation if necessary
67- if perm
68- n = length (onames )
73+ cfeat = if perm
74+ n = length (vars )
6975 inds = collect (1 : (n - 1 ))
7076 insert! (inds, rind, n)
71- X = X[:, inds]
77+ pfeat |> Select (inds)
78+ else
79+ pfeat
7280 end
7381
82+ # revert closure for full revertibility
83+ 𝒯 = revert (Closure (), cfeat, ccache)
84+
7485 # return same table type
75- 𝒯 = (; zip (onames, eachcol (X))... )
7686 𝒯 |> Tables. materializer (newfeat)
7787end
7888
0 commit comments