Dearest igraph users,

I'm running into some issues with igraph in R.

I've posted this same issue to Stack Overflow (
https://stackoverflow.com/posts/54155455) and was recommeded to come here.

Context: I have a path graph that I wish to contract iteratively; ie. at
each iteration, take a set of adjacent vertices in the path graph that fit
some critera, contract them together, and repeat iteratively until no
remaining vertices fit the criteria. Each path graph represents a
biological chromosome (this is biological data that I'm working with). The
path graph to contract is roughly 5,000 vertices long, and the program
iterates roughly 20 times at most per graph. Each sample case has 22 path
graphs to contract. Prototyping via Rstudio worked just fine (and still
works fine), however when running this as an Rscript it's throwing some
errors, and in a different iteration each time (ie. this seems to be
happening at random)

The first time I encountered the issue, it would throw a double free error.
Again, this would occur unpredictably. I tried running on a different
machine, however this threw a different memory-related error which I don't
remember. I made a new miniconda virtual environment and reinstalled all of
the requisite R packages, including igraph and tried again. Now I'm getting
another error, here:
```
Error in head.default("2616", 1L) : length(n) == 1L is not TRUE
Calls: write.table ... contract.vertices -> head -> head.default ->
stopifnot
In addition: There were 28 warnings (use warnings() to see them)
Error in contract.vertices(toy, mapping = vertices, vertex.attr.comb =
list(new_residual = "sum",  :
  VECTOR_ELT() can only be applied to a 'list', not a 'double'
Calls: write.table ... compressdata -> %>% -> eval -> eval ->
contract.vertices -> .Call
Execution halted
```
Note that in "head.default("2616", 1L)", the number (here "2616") is always
different every time I run the code. I have no idea what is actually
calling head.default() since I don't see it anywhere in the
contract.vertices() source code that I can get using
edit(getAnywhere(contract.vertices())). I've also scoured the C source code
on github which hasn't gotten me anywhere.

I'm running this on CentOS 7 machines with 1tb of memory each.

Here is the double free error with a few lines of the memory dump, note
that the ```Error: length(n) == 1L is not TRUE``` is being thrown inside an
igraph function (```contract_vertices()```) rather than my script. I see
this error when I run it from a different anaconda environment that I have
for another project.

```
Error: length(n) == 1L is not TRUE
In addition: There were 29 warnings (use warnings() to see them)
*** glibc detected ***
/home/lculibrk/miniconda3/envs/lukonda/lib/R/bin/exec/R: double free or
corruption (out): 0x00007ffffb3ea4a0 ***
======= Backtrace: =========
/lib64/libc.so.6[0x3e9f275f4e]
/lib64/libc.so.6[0x3e9f278cf0]
/home/lculibrk/R/x86_64-pc-linux-gnu-library/3.4/igraph/libs/igraph.so(igraph_vector_destroy+0x27)[0x7f8ccac45337]
/home/lculibrk/R/x86_64-pc-linux-gnu-library/3.4/igraph/libs/igraph.so(IGRAPH_FINALLY_FREE+0x63)[0x7f8ccab5b24d]
/home/lculibrk/R/x86_64-pc-linux-gnu-library/3.4/igraph/libs/igraph.so(R_igraph_finalizer+0xc1)[0x7f8ccac90976]
```

The consistent thing about the double free error above is it seems to occur
in the same memory address each time; 0x00007ffffb3ea4a0. Still, it occurs
in a different iteration each time, and on different path graphs each time.

I'm quite lost as to where exactly I can start the process of trying to
debug this issue, as I'm sure it must be on my end somewhere.

Thanks for any help you might be able to provide. Let me know if I need to
clarify anything or provide more information.

Best regards,
Luka Culibrk
_______________________________________________
igraph-help mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/igraph-help

Reply via email to