[R] On-demand importing of a package

Uwe Ligges ligges at statistik.tu-dortmund.de
Wed Nov 23 09:37:44 CET 2011

On 23.11.2011 03:18, Gabor Grothendieck wrote:
> On Tue, Nov 22, 2011 at 3:16 PM, Gábor Csárdi<csardi at rmki.kfki.hu>  wrote:
>> 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.
> Try adding these three lines to the package:
> rowSums<- function(x, na.rm = FALSE, dims = 1L) UseMethod("rowSums")
> rowSums.dgCMatrix<- Matrix:::rowSums
> rowSums.default<- base::rowSums

Folks, please not, just import relevant functionality from the 
*recommended* package Matrix.
Messing around even more is certainly less helpful than importing 
relevant part from a Namespace/package that you will use anyway.

Uwe Ligges

More information about the R-help mailing list