> > On Jan 4, 2016, at 11:17 PM, Lietz, Haiko <haiko.li...@gesis.org> wrote:
> > 
> > hi all,
> > 
> > when dputting a list of sparse matrices (Matrix package), the output does 
> > not contain the data but the information that the list contains sparse 
> > matrices.
> > 
> > M <- sparseMatrix(i = c(2, 1), j = c(1, 2), x = c(1, 1))
> > 
> > dput(M) ... works.
> > 
> > dput(list(M, M)) ... does not work.
> > 
> > how can I dput a list of sparse matrices?

> > MM <- list(M,M)
> > dput(MM)
> list(<S4 object of class structure("dgCMatrix", package = "Matrix")>, 
>     <S4 object of class structure("dgCMatrix", package = "Matrix")>)

> No problem.

> I do get an error (clarifying the "did not work" statement), as (perhaps) did 
> you?

> > dput(M,M)
> Error in cat("new(\"", clx, "\"\n", file = file, sep = "") : 
>   invalid connection

> Perhaps the `dput` function was not configured to handle two S4 objects in  a 
> list?

Indeed.  As a matter of fact,  a long time I ago I had added a 'FIXME'
comment to the R source code of dput:

see  https://svn.r-project.org/R/trunk/src/library/base/R/dput.R

which contains

    ## FIXME: this should happen in C {deparse2() in ../../../main/deparse.c}
    ##        but we are missing a C-level slotNames()
    ## Fails e.g. if an S3 list-like object has S4 components
    if(isS4(x)) {
        clx <- class(x)
        cat('new("', clx,'"\n', file = file, sep = "")
        for(n in methods::.slotNames(clx)) {
            cat("    ,", n, "= ", file = file)
            dput(methods::slot(x, n), file = file, control = control)
        }
        cat(")\n", file = file)
        invisible()
    }
    else .Internal(dput(x, file, opts))

Ideally the above code would be replaced by simply

    .Internal(dput(x, file, opts))

and the C code called in do_dput()  in
  https://svn.r-project.org/R/trunk/src/main/deparse.c
would be improved to do the above in C and be properly
recursive.

(Tested) patches are very welcome!

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 http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to