From 511fa84b8b6d61977ffb7b87596ff950cd70f27b Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Mon, 31 Aug 2026 16:11:44 +0000 Subject: [PATCH 1/2] =?UTF-8?q?=E2=9A=A1=20Bolt:=20mirt=20=ED=8C=8C?= =?UTF-8?q?=EB=9D=BC=EB=AF=B8=ED=84=B0=20=EC=B6=94=EC=B6=9C=20=EC=8B=9C=20?= =?UTF-8?q?=EB=B6=88=ED=95=84=EC=9A=94=ED=95=9C=20O(N)=20=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=20=EB=B3=B5=EC=82=AC=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit πŸ’‘ What: `colnames(newformXDataK[colnames(newFormModel@Data$data)])` λŒ€μ‹  `colnames(newFormModel@Data$data)`λ₯Ό 직접 μ‚¬μš©ν•˜λ„λ‘ μ΅œμ ν™”ν–ˆμŠ΅λ‹ˆλ‹€. 🎯 Why: κΈ°μ‘΄ μ½”λ“œλŠ” λ‹¨μˆœνžˆ 컬럼 이름을 μ–»κΈ° μœ„ν•΄ λ°μ΄ν„°ν”„λ ˆμž„μ„ λ‹€μ‹œ subsetting ν•˜λ―€λ‘œ λΆˆν•„μš”ν•œ O(N) λ©”λͺ¨λ¦¬ ν• λ‹Ήκ³Ό 볡사가 λ°œμƒν•©λ‹ˆλ‹€. πŸ“Š Impact: λͺ¨λΈ 데이터λ₯Ό μ…‹μ—…ν•˜λŠ” κ³Όμ •μ—μ„œ λ°œμƒν•˜λŠ” λΆˆν•„μš”ν•œ λ©”λͺ¨λ¦¬ ν• λ‹Ή 및 볡사 μ˜€λ²„ν—€λ“œλ₯Ό O(1) μˆ˜μ€€μœΌλ‘œ κ°μ†Œμ‹œν‚΅λ‹ˆλ‹€. πŸ”¬ Measurement: λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό 톡해 κΈ°λŠ₯이 μ •μƒμ μœΌλ‘œ μœ μ§€λ˜λŠ”μ§€ κ²€μ¦ν–ˆμŠ΅λ‹ˆλ‹€. --- R/aFIPC.R | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/R/aFIPC.R b/R/aFIPC.R index 62546519..01922714 100644 --- a/R/aFIPC.R +++ b/R/aFIPC.R @@ -620,8 +620,8 @@ autoFIPC <- IPDItemCount <- 0 # 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 +749,8 @@ autoFIPC <- } } - 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: Cache parameter indices to avoid O(N) linear search inside loop newScaleParmsItemIdxCache <- split(seq_len(nrow(NewScaleParms)), NewScaleParms$item) From e22013532ce3c8706022660e325a73e4e71bb2fc Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sat, 5 Sep 2026 01:24:48 +0900 Subject: [PATCH 2/2] revert(perf): preserve source-data column admission --- R/aFIPC.R | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/R/aFIPC.R b/R/aFIPC.R index 01922714..62546519 100644 --- a/R/aFIPC.R +++ b/R/aFIPC.R @@ -620,8 +620,8 @@ autoFIPC <- IPDItemCount <- 0 # IPD target item checking - newFormColNames <- colnames(newFormModel@Data$data) - oldFormColNames <- colnames(oldFormModel@Data$data) + newFormColNames <- colnames(newformXDataK[colnames(newFormModel@Data$data)]) + oldFormColNames <- colnames(oldformYDataK[colnames(oldFormModel@Data$data)]) # ⚑ Bolt: Vectorized match() to avoid dynamic array growth overhead inside a for loop idxNew <- match(newformCommonItemNames, newFormColNames) @@ -749,8 +749,8 @@ autoFIPC <- } } - newFormColNames <- colnames(newFormModel@Data$data) - oldFormColNames <- colnames(oldFormModel@Data$data) + newFormColNames <- colnames(newformXDataK[colnames(newFormModel@Data$data)]) + oldFormColNames <- colnames(oldformYDataK[colnames(oldFormModel@Data$data)]) # ⚑ Bolt: Cache parameter indices to avoid O(N) linear search inside loop newScaleParmsItemIdxCache <- split(seq_len(nrow(NewScaleParms)), NewScaleParms$item)