diff --git a/R/aFIPC.R b/R/aFIPC.R index 62546519..07e90b4f 100644 --- a/R/aFIPC.R +++ b/R/aFIPC.R @@ -619,9 +619,10 @@ autoFIPC <- )) IPDItemCount <- 0 + # ⚡ Bolt: Avoid O(N) memory copy by extracting colnames directly instead of subsetting dataframe # IPD target item checking - newFormColNames <- colnames(newformXDataK[colnames(newFormModel@Data$data)]) - oldFormColNames <- colnames(oldformYDataK[colnames(oldFormModel@Data$data)]) + newFormColNames <- colnames(newFormModel@Data$data) + oldFormColNames <- colnames(oldFormModel@Data$data) # ⚡ Bolt: Vectorized match() to avoid dynamic array growth overhead inside a for loop idxNew <- match(newformCommonItemNames, newFormColNames) @@ -749,8 +750,9 @@ autoFIPC <- } } - newFormColNames <- colnames(newformXDataK[colnames(newFormModel@Data$data)]) - oldFormColNames <- colnames(oldformYDataK[colnames(oldFormModel@Data$data)]) + # ⚡ Bolt: Avoid O(N) memory copy by extracting colnames directly instead of subsetting dataframe + newFormColNames <- colnames(newFormModel@Data$data) + oldFormColNames <- colnames(oldFormModel@Data$data) # ⚡ Bolt: Cache parameter indices to avoid O(N) linear search inside loop newScaleParmsItemIdxCache <- split(seq_len(nrow(NewScaleParms)), NewScaleParms$item)