53
53
_missing_omit (x:: AbstractVector{T} ) where T = copyto! (similar (x, nonmissingtype (T)), x)
54
54
_missing_omit (x:: AbstractVector , rows) = _missing_omit (view (x, rows))
55
55
56
- function missing_omit (d:: T ) where T<: ColumnTable
56
+ function _maybe_missing_omit (d:: T ) where T<: ColumnTable
57
57
nonmissings = trues (length (first (d)))
58
- for col in d
59
- _nonmissing! (nonmissings, col)
60
- end
61
- d_nonmissing = if all (nonmissings)
62
- map (_missing_omit, d)
58
+ if any (eltype (col) >: Missing for col in d)
59
+ for col in d
60
+ _nonmissing! (nonmissings, col)
61
+ end
62
+ d_nonmissing = if all (nonmissings)
63
+ map (_missing_omit, d)
64
+ else
65
+ rows = findall (nonmissings)
66
+ map (Base. Fix2 (_missing_omit, rows), d)
67
+ end
68
+ return d_nonmissing, nonmissings
63
69
else
64
- rows = findall (nonmissings)
65
- map (Base. Fix2 (_missing_omit, rows), d)
70
+ return d, nonmissings
66
71
end
67
- d_nonmissing, nonmissings
68
72
end
69
73
70
- missing_omit (data:: T , formula:: AbstractTerm ) where T<: ColumnTable =
71
- missing_omit (NamedTuple {tuple(termvars(formula)...)} (data))
74
+ _maybe_missing_omit (data:: T , formula:: AbstractTerm ) where T<: ColumnTable =
75
+ _maybe_missing_omit (NamedTuple {tuple(termvars(formula)...)} (data))
72
76
73
77
function ModelFrame (f:: FormulaTerm , data:: ColumnTable ;
74
78
model:: Type{M} = StatisticalModel, contrasts= Dict {Symbol,Any} ()) where M
@@ -78,7 +82,7 @@ function ModelFrame(f::FormulaTerm, data::ColumnTable;
78
82
throw (ArgumentError (msg))
79
83
end
80
84
81
- data, _ = missing_omit (data, f)
85
+ data, _ = _maybe_missing_omit (data, f)
82
86
83
87
sch = schema (f, data, contrasts)
84
88
f = apply_schema (f, sch, M)
0 commit comments