I was asked privately > I have been using <the Matrix package> extensively to > calculate the relatedness-matrix based on the pedigree for > our ornamental plants. I was wondering if you could give > me some advice, for which I would like to thank you in > advance!
> The output of the relatedness matrix I get from > the nadiv package is a dsCMatrix. I would like to save it > in some way, so I could query a subset of this matrix > later on, as in most cases, the full matrix is not > needed. Do you know what kind of format is ideal for > data-storage (either in file or in a database) for a > sparse matrix? Thanks in advance! as that is a relative general question, I allow myself to answer in public such that the answer my help others as well. Let's use an example from package 'nadiv': require(nadiv) ?makeA # to learn about the function ## create a largish example Awarcol <- makeA(ggTutorial[1:2000, 1:3]) str(Awarcol) nnzero(Awarcol) object.size(Awarcol) object.size(as.matrix(Awarcol)) # ~ 14 times large image(Awarcol) # wait a bit .. ... but it's worth it! ------------- > Awarcol <- makeA(ggTutorial[1:2000, 1:3]) > str(Awarcol) Formal class 'dsCMatrix' [package "Matrix"] with 7 slots ..@ i : int [1:164107] 0 1 2 3 4 5 6 7 8 9 ... ..@ p : int [1:2001] 0 1 2 3 4 5 6 7 8 9 ... ..@ Dim : int [1:2] 2000 2000 ..@ Dimnames:List of 2 .. ..$ : chr [1:2000] "1" "2" "3" "4" ... .. ..$ : chr [1:2000] "1" "2" "3" "4" ... ..@ x : num [1:164107] 1 1 1 1 1 1 1 1 1 1 ... ..@ uplo : chr "U" ..@ factors : list() > nnzero(Awarcol) [1] 326214 > object.size(Awarcol) 2235112 bytes > object.size(as.matrix(Awarcol)) 32256488 bytes > ------------------------------------------------ Now, save it (as file to current working directory) via saveRDS(Awarcol, file = "makeA_warc.rds") ## and that is *only* 110 Kbytes : > file.size("makeA_warc.rds") [1] 115288 Or restore it in a later R session Amat.warcol <- readRDS("makeA_warc.rds") > str(Awarc) Loading required package: Matrix Formal class 'dsCMatrix' [package "Matrix"] with 7 slots ..@ i : int [1:164107] 0 1 2 3 4 5 6 7 8 9 ... ..@ p : int [1:2001] 0 1 2 3 4 5 6 7 8 9 ... ..@ Dim : int [1:2] 2000 2000 ..@ Dimnames:List of 2 .. ..$ : chr [1:2000] "1" "2" "3" "4" ... .. ..$ : chr [1:2000] "1" "2" "3" "4" ... ..@ x : num [1:164107] 1 1 1 1 1 1 1 1 1 1 ... ..@ uplo : chr "U" ..@ factors : list() > image(Awarc) > Note how 'str(..)' automatically loaded the Matrix package which you do need for image(<dsCMatrix>) to work nicely. Best regards, Martin -- Martin Maechler ETH Zurich and R Core team ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide https://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.