diff --git a/.Rbuildignore b/.Rbuildignore index 1c85620..b85d639 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -15,3 +15,5 @@ ^registered_agents\.json$ ^task_agent_mapping\.json$ ^\.gitleaks\.toml$ +^\.jules$ +^\.jules/.* diff --git a/.jules/bolt.md b/.jules/bolt.md new file mode 100644 index 0000000..780242c --- /dev/null +++ b/.jules/bolt.md @@ -0,0 +1,3 @@ +## 2024-07-25 - Prevent redundant expensive operations (mirt::fscores) +**Learning:** In the `aFIPC` package, calculating `mirt::fscores(..., method = 'MAP')` is an expensive operation. Previously, it was called redundantly: once to calculate expected scores (`mirt::expected.test`) and once again to return the `Theta` variables. +**Action:** Always pre-calculate expensive operations like `fscores` and store them in variables to reuse them, avoiding redundant CPU cycles. diff --git a/R/aFIPC.R b/R/aFIPC.R index 81b6cc9..c60048f 100644 --- a/R/aFIPC.R +++ b/R/aFIPC.R @@ -1002,28 +1002,28 @@ autoFIPC <- # stop('Estimation failed. Please check test quality.') # } + # calculate theta + ThetaOldform <- fscores(oldFormModel, method = 'MAP') + ThetaLinkedform <- fscores(LinkedModel, method = 'MAP') + ThetaNewform <- fscores(newFormModel, method = 'MAP') + # calculate expected score ExpectedScoreOldform <- mirt::expected.test( x = oldFormModel, - Theta = fscores(oldFormModel, method = 'MAP') + Theta = ThetaOldform ) ExpectedScoreLinkedform <- mirt::expected.test( x = LinkedModel, - Theta = fscores(LinkedModel, method = 'MAP') + Theta = ThetaLinkedform ) ExpectedScoreNewform <- mirt::expected.test( x = newFormModel, - Theta = fscores(newFormModel, method = 'MAP') + Theta = ThetaNewform ) - # calculate theta - ThetaOldform <- fscores(oldFormModel, method = 'MAP') - ThetaLinkedform <- fscores(LinkedModel, method = 'MAP') - ThetaNewform <- fscores(newFormModel, method = 'MAP') - # save results as object modelReturn <- new.env() modelReturn$oldFormModel <- oldFormModel