From f889cff5fe1cd2ca1b478e41ae755bc89f154f9f Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Wed, 8 Jul 2026 19:27:47 +0000 Subject: [PATCH] =?UTF-8?q?=E2=9A=A1=20Jules:=20[=EC=84=B1=EB=8A=A5=20?= =?UTF-8?q?=EC=B5=9C=EC=A0=81=ED=99=94]=20=EC=97=AC=EB=9F=AC=20=EB=B2=88?= =?UTF-8?q?=EC=9D=98=20=EB=AC=B8=EC=9E=90=EC=97=B4=20=EA=B2=80=EC=83=89?= =?UTF-8?q?=EC=9D=84=20=EB=8B=A8=EC=9D=BC=20=EC=A0=95=EA=B7=9C=EC=8B=9D?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=ED=86=B5=ED=95=A9=ED=95=98=EC=97=AC=20?= =?UTF-8?q?=EC=84=B1=EB=8A=A5=EC=9D=84=20=ED=96=A5=EC=83=81=EC=8B=9C?= =?UTF-8?q?=EC=BC=B0=EC=8A=B5=EB=8B=88=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .jules/bolt.md | 3 +++ R/aFIPC.R | 10 +--------- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/.jules/bolt.md b/.jules/bolt.md index 1abb238..56bbff4 100644 --- a/.jules/bolt.md +++ b/.jules/bolt.md @@ -1,3 +1,6 @@ ## 2024-07-04 - R 언어에서 루프 내 데이터 프레임 탐색 병목 최적화 **Learning:** R에서 루프를 돌면서 매번 데이터 프레임을 서브셋팅(subsetting)하는 작업은 복사 오버헤드로 인해 매우 느려질 수 있습니다. 특히 공통 문항 수가 많아질 경우 O(N^2)의 비효율을 초래합니다. **Action:** 루프 내에서 수행하던 데이터 프레임 조회를 루프 외부에서 한 번에 `as.character(unlist(...))`로 처리하는 벡터 연산으로 변경하여 타입 변환 없이 O(1) 수준으로 성능을 크게 향상시킬 수 있습니다. +## 2024-07-08 - R 언어에서 다중 패턴 제외 필터링 성능 최적화 +**Learning:** R에서 여러 `grep()` 결과를 `-c()`로 합쳐서 벡터의 원소를 제외하는 로직(`x[-c(grep(pattern1), grep(pattern2))]`)은 여러 번의 문자열 검색과 인덱스 배열 생성으로 인해 오버헤드가 발생하며, 매칭되는 패턴이 없을 경우 `integer(0)`을 반환하여 전체 벡터가 삭제되는 버그를 유발할 수 있습니다. +**Action:** 여러 `grep` 조건을 하나의 정규 표현식으로 묶어 `!grepl("^(pattern1|pattern2)", x)` 형태로 사용하는 것이 성능 면에서 유리하며, 결과가 없을 때의 안전성도 확보됩니다. diff --git a/R/aFIPC.R b/R/aFIPC.R index 2e5ac4a..83e0f76 100644 --- a/R/aFIPC.R +++ b/R/aFIPC.R @@ -603,15 +603,7 @@ autoFIPC <- # IPD estimation IPDParmNames <- OldScaleParms$name IPDParmNames <- IPDParmNames[!duplicated(IPDParmNames)] - IPDParmNames <- - IPDParmNames[ - -c( - grep("^MEAN", IPDParmNames), - grep("^COV", IPDParmNames), - grep("^ak", IPDParmNames), - grep("^d0$", IPDParmNames) - ) - ] + IPDParmNames <- IPDParmNames[!grepl("^(MEAN|COV|ak|d0$)", IPDParmNames)] IPDParmNames <- as.character(IPDParmNames) mirt::mirtCluster()