|
101 | 101 | for (group_id in seq_along(groups)) { |
102 | 102 | group = groups[group_id] |
103 | 103 | group_filter = input[[group_col]] == group |
104 | | - by_group[[group_id]] = data.table::as.data.table( |
105 | | - expand.grid( |
106 | | - labels = labels, |
107 | | - features = unique(input[[feature_col]][group_filter]), |
108 | | - measurements = unique(input[[measurement_col]][group_filter]) |
109 | | - )) |
110 | | - na_label_features = unique(input[[feature_col]][group_filter & is.na(input[["IsotopeLabelType"]])]) |
| 104 | + non_na_filter = group_filter & !is.na(input[["IsotopeLabelType"]]) |
| 105 | + na_filter = group_filter & is.na(input[["IsotopeLabelType"]]) |
| 106 | + non_na_features = unique(input[[feature_col]][non_na_filter]) |
| 107 | + na_label_features = unique(input[[feature_col]][na_filter]) |
| 108 | + parts = list() |
| 109 | + if (length(non_na_features) > 0) { |
| 110 | + parts[[length(parts) + 1]] = data.table::as.data.table( |
| 111 | + expand.grid( |
| 112 | + labels = labels, |
| 113 | + features = non_na_features, |
| 114 | + measurements = unique(input[[measurement_col]][non_na_filter]) |
| 115 | + )) |
| 116 | + } |
111 | 117 | if (length(na_label_features) > 0) { |
112 | | - na_rows = data.table::as.data.table(expand.grid( |
113 | | - labels = NA, |
114 | | - features = na_label_features, |
115 | | - measurements = unique(input[[measurement_col]][group_filter]) |
116 | | - )) |
117 | | - by_group[[group_id]] = data.table::rbindlist(list(by_group[[group_id]], na_rows)) |
| 118 | + parts[[length(parts) + 1]] = data.table::as.data.table( |
| 119 | + expand.grid( |
| 120 | + labels = NA, |
| 121 | + features = na_label_features, |
| 122 | + measurements = unique(input[[measurement_col]][na_filter]) |
| 123 | + )) |
118 | 124 | } |
| 125 | + by_group[[group_id]] = data.table::rbindlist(parts) |
119 | 126 | by_group[[group_id]]$group = group |
120 | 127 | } |
121 | 128 | result = data.table::rbindlist(by_group) |
|
0 commit comments