Reverse-Correlation Image-Classification Toolbox
Overview
Generate stimuli and analyze data of reverse correlation image classification experiments (psychophysical tasks aimed at visualizing cognitive mental representations of faces). For the method see Dotsch and Todorov (2012) doi:10.1177/1948550611430272; for a practical primer see Brinkman, Todorov and Dotsch (2017) doi:10.1080/10463283.2017.1381469.
Reproducibility impact
- **
batchGenerateCI()andbatchGenerateCI2IFC()now group a tibble correctly.** Called on a tibble with more than one group inby, rcicr 1.1.0 through 1.4.1 returned a single classification image instead of one per group. That image was built from alternating trials of different groups and named after the first group. Adata.frame, or a tibble with one group, was never affected, and its results do not change. (#336) You were affected if the list these functions returned had one element although your data held several participants or conditions; data read with readr or processed with dplyr is a tibble. Recompute those CIs with this version, or with an older one afteras.data.frame(). No stimuli need regenerating or responses recollecting. Of the affected versions, only 1.3.0 and 1.4.1 were released on CRAN; the others were GitHub releases. The 1.1.0 entry below saying these functions accept tibble columns held only for a single group. - **The default InfoVal reference now needs the stimulus seed saved in the file.** Without a
response_seed, the reference replays that seed. A file without one (made withgenerateStimuli2IFC(seed = NULL), or with theseedfield removed) now stops with an error before anything is simulated. The error gives the call that stores a reproducible reference,generateReferenceDistribution2IFC(rdata, response_seed = <n>), which latercomputeInfoVal2IFC()calls reuse, and, for a file that cannot be written,computeInfoVal2IFC(..., response_seed = <n>). Files with a seed are unaffected. Such a file used to reseed from the clock, so its reference could not be reproduced.generateReferenceDistribution2IFC()andcomputeInfoVal2IFC(force_gen_ref_dist = TRUE)returned a different one on every call. The first automaticcomputeInfoVal2IFC()stored one that later calls reused, so the InfoVal was stable on that copy of the file and different on any other. This happened on every version back to 1.0.1 for files made withseed = NULL, and on 1.4.0 and 1.4.1 for files without the field; earlier versions stopped on those. A reference already stored by 1.4.0 or later is still used, with a message that it cannot be regenerated from the file. An older stored reference, which rcicr rebuilds, now stops like any other. Replacing either with a seeded reference makes the InfoVal reproducible; it will differ from the one reported before. (#334)
Bug fixes
- **Saving a reference distribution no longer risks the stimulus
.Rdatafile.**computeInfoVal2IFC()andgenerateReferenceDistribution2IFC()store the reference in that file, and a save that was interrupted (Esc, an error, R killed or crashing) could leave it unloadable, losing the only record of the stimuli. The file is now backed up beside itself for the duration of the save, as<file>.rcicr-backup, and restored automatically if the save fails. It keeps its owner, group and permissions. (#333) If R is killed during the save, the backup remains, and any function that reads the damaged file says so. If the file still loads, the next save stops and asks you to delete the backup, since rcicr does not delete a file it cannot prove it made. If the file no longer loads, check that the backup holds this experiment (the error shows how), restore it withfile.copy("<file>.rcicr-backup", "<file>", overwrite = TRUE, copy.mode = FALSE), check that the file loads again, and only then delete the backup. Leftover<file>.rcicr-staging-*files are incomplete copies and can be deleted. Limits: a writable file in a read-only directory (Unix), and a file name over 228 bytes, are saved as before, without a backup, with a warning. On Windows, a writable file in a folder that refuses new files now stops with an error instead of being saved, as does any save where the backup cannot be made, such as on a full disk. On Windows the backup has its folder's permissions rather than being private to you. Power loss and operating-system crashes are not covered, and two R sessions saving the same file at once remain unsafe. - **
generateCI()stops when some, but not all,participantsIDs areNA.** It used to return a CI in which every pixel wasNA, with onlymin/maxwarnings, and write it as a solid black PNG; every version since 1.0.1 did this. The error names the trials without an ID. Give them one, or remove them fromstimuli,responsesandparticipantsalike. An all-NAparticipantsstill means no grouping, and no valid result changes. (#337) - **
generateStimuli2IFC()never overwrites a stimulus.Rdatafile.** Its file name records the minute, so two calls into one folder with the samelabelandseedin the same minute used to write one file, and the first set's PNGs lost the only record of their noise parameters. The name is now reserved before anything is generated, and the call stops, having written nothing, if that file exists or if another call into the same folder with the same seed, started in the same minute, is still running. The error says to use a differentlabelorstimulus_path, or to delete the file if the set is being regenerated on purpose. The time in the name is now the start of the call rather than its end. (#338) - **An
img_sizethe noise scales cannot tile now gets an error that says so.** The finest ofnscalesscales tiles the image with2^(nscales - 1)patches per side, soimg_sizemust be divisible by that.generateNoisePattern(), and through itgenerateStimuli2IFC()andsimulateNoiseIntensities(), used to fail with "number of items to replace is not a multiple of replacement length". The error now names the constraint, the nearest valid sizes and the largestnscalesthat fits. Every size that worked still works. (#339)
Show all changes in 1.5.0Hide the rest of the changes in 1.5.0
Documentation
- Corrected help pages that disagreed with the code:
generateStimuli2IFC(return_as_dataframe = TRUE)returns one row per pixel and one column per trial, not the reverse.generateCI()takes its scaling constant asscaling_constant, notconstant.batchGenerateCI()also acceptsscaling = "matched".plotZmap()takes a background image matrix, not an.Rdatafile.generateNoisePattern()returns four elements, not two.?computeInfoVal2IFCcites the published InfoVal paper (Brinkman et al., 2019) instead of a manuscript in preparation.computeInfoVal2IFC()always simulates a reference distribution the.Rdatafile does not hold; rcicr ships no precomputed ones.- Rewrote the README, both vignettes and the help pages for readability. The "no longer actively maintained" notice is removed from the README.
From NEWS.md in the release
Install
Health
- OK13 OKNow
- OK9 OK2026-09-04
Documentation
The repository also keeps web-only articles.
- Help pages
- 18 (1 internal)includes a package overview page
- Examples that run
- 100%17 run in a plain check
- Exported functions with examples
- 100%
- Documented parameters
- 100%
- Return-value docs
- 100%
- Help pages citing references
- 6%
Downloads
Repository
- PRs merged (all time)
- 93%
- Median days to close, 50 most recently updated closed issues
- 1
- Median days to close, 50 most recently updated closed PRs
- 0
Stars over time
Releases over time
Issues over time
PRs over time
Commits over time
Commit identities over time
15 development-tooling and community-health practices detected across 8 families in the upstream repository
Checks run against github.com/rdotsch/rcicr on 2026-10-11.
The R CMD check workflow runs on Linux, macOS and Windows, and on R-devel
GitHub Pages site last deployed 2026-10-04 · The repository has a site deploy workflow
pkgdown site last built 2026-10-04
Show all practicesHide 4 practices
This repository shows signs of AI coding tools.
- Claude Codefirst seen 2026-07-26Seen in the repository: .claude, CLAUDE.mdNamed in .Rbuildignore: .claude, CLAUDE.mdPull request it wrote: opened by a project memberCommits: at least 145 crediting it in the message
- Claude Opus 571 commits · Jul to Sep 2026
- Claude Opus 5.545 commits · Sep to Oct 2026
- Claude Sonnet 527 commits · Jul to Sep 2026
- Claude Opus 4.62 commits · Aug 2026
Some of these counts are a minimum, because the search stopped before the oldest commits.
Dependencies
Installing rcicr adds 47 packages (23 with compiled code, 25 MB of source tarballs). Heaviest: ggplot2 6.0 MB, spatstat.data 2.9 MB, viridis 2.9 MB.
Code & Tests
People & History
Pick two releases to compare their code metrics.
- 1.5.0Latest
- 1.4.12026-09-20 · diff ↗
- unarchivedReturned to CRAN2026-09-02
- 1.3.02026-09-02 · diff ↗ ·
added 4 exports
computeInfoVal2IFC, deg2rad, generateReferenceDistribution2IFC, plotZmap - RR 4.6.0 released · 2026-04-24
- RR 4.5.0 released · 2025-04-11
- RR 4.4.0 released · 2024-04-24
- RR 4.3.0 released · 2023-04-21
- RR 4.2.0 released · 2022-04-22
- archivedRemoved from CRAN2021-06-08email to the maintainer was undeliverable
- RR 4.1.0 released · 2021-05-18
- RR 4.0.0 released · 2020-04-24
- RR 3.6.0 released · 2019-04-26
- RR 3.5.0 released · 2018-04-23
- RR 3.4.0 released · 2017-04-21
- 0.3.4.1
Show 10 earlier eventsHide 10 earlier events
- RR 3.3.0 released · 2016-05-03
- 0.3.2.12016-02-05 · diff ↗
- 0.3.22015-07-20 · diff ↗ ·
added 3 exports
batchGenerateCI, computeCumulativeCICorrelation, generateCINoise - RR 3.2.0 released · 2015-04-16
- 0.3.02015-01-23 · diff ↗
- 0.2.62014-12-19 · diff ↗
- 0.2.52014-11-17 · diff ↗
- 0.2.4
- 0.2.12014-07-31
- RR 3.1.0 released · 2014-04-10
Package metadata
- First published
- 2014-07-31
- Total releases
- 11 / 12 yrs
- License
- GPL-2 OSI
- Minimum R
- ≥ 4.1
- Download size
- 1.1 MB
Cite
Cite this package
Run in R for the authors' preferred citation:
citation("rcicr")The package provides a citation file that builds its entry when R runs it. Run citation() to see it.
The repository also keeps a CITATION.cff.
Cite the R Observatory
For a number measured here: a download total, a coverage figure, an archival date.
From data release v2026-10-17, which the citation names so these numbers can be found later. More on citing and the projects behind them.