It is from base R https://github.com/wch/r-source/blob/a984cc29b9b8d8821f8eb2a1081d9e0d1d4df56e/src/main/memory.c#L3214
and likely indicates memory corruption, not necessarily in the code that triggers the error (this is when the garbage collector is triggered...). Probably in *your* C code :) since it's the least tested. Probably writing out of bounds. This could be quite tricky to debug. I'd try to get something close to a minimal reproducible example. I'd try to take devtools out of the picture, maybe running the test/testhat.R script from the command line using Rscript, or worst case creating a shell package that adds minimal code and can be checked with R CMD build --no-build-vignettes / R CMD check. You could try inserting gc() before / after the unit test; it might make it clear that the unit test isn't the problem. You could also try gctorture(TRUE); this will make your code run extremely painfully slowly, which puts a big premium on having a minimal reproducible example; you could put this near the code chunks that are causing problems. You might have success running under valgrind, something like R -d valgrind -f minimal_script.R. Hope those suggestions help! Martin On 10/12/21, 6:43 PM, "Bioc-devel on behalf of Pariksheet Nanda" <bioc-devel-boun...@r-project.org on behalf of pariksheet.na...@uconn.edu> wrote: Hi folks, I've been told to ask some of my more fun questions on this mailing list instead of Slack. I'm climbing the ladder of submitting my first Bioconductor package (https://gitlab.com/coregenomics/tsshmm) and feel like there are gremlins that keep adding rungs to the top of the ladder. The latest head scratcher from running devtools::check() is a unit test for a trivial 2 line function failing with this gem of an error: > test_check("tsshmm") ══ Failed tests ════════════════════════════════════════════════════════════════ ── Error (test-tss.R:11:5): replace_unstranded splits unstranded into + and - ── Error in `tryCatchOne(expr, names, parentenv, handlers[[1L]])`: internal logical NA value has been modified Backtrace: █ 1. ├─testthat::expect_equal(...) test-tss.R:11:4 2. │ └─testthat::quasi_label(enquo(expected), expected.label, arg = "expected") 3. │ └─rlang::eval_bare(expr, quo_get_env(quo)) 4. └─GenomicRanges::GRanges(c("chr:100:+", "chr:100:-")) 5. └─methods::as(seqnames, "GRanges") 6. └─GenomicRanges:::asMethod(object) 7. └─GenomicRanges::GRanges(ans_seqnames, ans_ranges, ans_strand) 8. └─GenomicRanges:::new_GRanges(...) 9. └─S4Vectors:::normarg_mcols(mcols, Class, ans_len) 10. └─S4Vectors::make_zero_col_DFrame(x_len) 11. └─S4Vectors::new2("DFrame", nrows = nrow, check = FALSE) 12. └─methods::new(...) 13. ├─methods::initialize(value, ...) 14. └─methods::initialize(value, ...) 15. └─methods::validObject(.Object) 16. └─base::try(...) 17. └─base::tryCatch(...) 18. └─base:::tryCatchList(expr, classes, parentenv, handlers) 19. └─base:::tryCatchOne(expr, names, parentenv, handlers[[1L]]) [ FAIL 1 | WARN 0 | SKIP 0 | PASS 109 ] The full continuous integration log is here: https://gitlab.com/coregenomics/tsshmm/-/jobs/1673603868 The function in question is: replace_unstranded <- function (gr) { idx <- strand(gr) == "*" if (length(idx) == 0L) return(gr) sort(c( gr[! idx], `strand<-`(gr[idx], value = "+"), `strand<-`(gr[idx], value = "-"))) } Also online here: https://gitlab.com/coregenomics/tsshmm/-/blob/ef5e19a0e2f68fca93665bc417afbcfb6d437189/R/hmm.R#L170-178 ... and the unit test is: test_that("replace_unstranded splits unstranded into + and -", { expect_equal(replace_unstranded(GRanges("chr:100")), GRanges(c("chr:100:+", "chr:100:-"))) expect_equal(replace_unstranded(GRanges(c("chr:100", "chr:200:+"))), sort(GRanges(c("chr:100:+", "chr:100:-", "chr:200:+")))) }) Also online here: https://gitlab.com/coregenomics/tsshmm/-/blob/ef5e19a0e2f68fca93665bc417afbcfb6d437189/tests/testthat/test-tss.R#L11-L12 What's interesting is this is *not* reproducible by running devtools::test() but only devtools::check() so as far as I know there isn't a way to interactively debug this while devtools::check() is going on? Every few days I've seen on that "internal ... value has been modified" which prevents me from running nearly any R commands. Originally I would restart R, but then I found I could clear that error by running gc(). No idea what causes it. Maybe some S4 magic? Yes, I have downloaded the mailing lists for bioc-devel, r-devel, r-help, and r-package-devel and see no mention of "value has been modified" [1]. Any help appreciated. Pariksheet [1] Mailing lists downloader: #!/bin/bash -x for url in https://stat.ethz.ch/pipermail/{bioc-devel,r-{devel,help,package-devel}}/ do dir=$(basename $url) wget \ --timestamping \ --no-remove-listing \ --recursive \ --level 1 \ --no-directories \ --no-host-directories \ --cut-dirs 2 \ --directory-prefix "$dir" \ --accept '*.txt.gz' \ --relative \ --no-parent \ $url done _______________________________________________ Bioc-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/bioc-devel _______________________________________________ Bioc-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/bioc-devel