[R] On-demand importing of a package

Gábor Csárdi csardi at rmki.kfki.hu
Tue Nov 22 21:16:52 CET 2011


Dear All,

in some functions of my package, I use the Matrix S4 class, as defined
in the Matrix package.

I don't want to depend on Matrix, however, because my package is
perfectly fine without Matrix, most of the functionality does not need
Matrix. Matrix is so included in the 'Suggests' line.

I load Matrix via require(), from the functions that really need it.
This mostly works fine, but I have an issue now that I cannot sort
out.

If I define a function like this in my package:

f <- function() {
  require(Matrix)
  res <- sparseMatrix(dims=c(5, 5), i=1:5, j=1:5, x=1:5)
  y <- rowSums(res)
  res / y
}

then calling it from the R prompt I get
Error in rowSums(res) : 'x' must be an array of at least two dimensions

which basically means that the rowSums() in the base package is
called, not the S4 generic in the Matrix package. Why is that?
Is there any way to work around this problem, without depending on Matrix?

I am doing this on R 2.14.0, x86_64-apple-darwin9.8.0.

Thank You, Best Regards,
Gabor

-- 
Gabor Csardi <csardi at rmki.kfki.hu>     MTA KFKI RMKI



More information about the R-help mailing list