我试图使用Sparsekit在R中编写矩阵稀疏矩阵乘法的子程序。这是一个简单的Fortran子例程,它在Sparsekit中调用两个子例程
subroutine mprod(nrowa,ncola,ncolb,job,ra,fa,ca,rb,fb,cb,rc,fc, cc, nnzc, iwi,err)
call amubdg(nrowa,ncola,ncolb,fa,ca,fb,cb,ndegr,nnzc,iwi)
call amub (nrowa,ncolb,job,ra,fa,ca,rb,fb,cb, rc,fc, cc, nnzc,iwi,err)
return
end
子例程amubdg
获取产品每行中非零元素的数量,即它返回nnzc
我需要在amub
中指定以计算产品。这是我的问题,在R
编译后,我正在编写的包中的函数没有问题。
z <- .Fortran("mprod",
nrowa=as.integer(nrowa),
ncola=as.integer(ncola),
ncolb=as.integer(ncolb),
job= as.integer(1),
ra=as.double(A.csr@ra),
fa=as.integer(A.csr@ja),
ca=as.integer(A.csr@ia),
rb=as.double(B.csr@ra),
fb=as.integer(B.csr@ja),
cb=as.integer(B.csr@ia),
rc=double(nnzc),
fb=integer(nnzc),
cb=integer(A.csr@ia+1),
ndegr=integer(nrowa),
iwi=integer(ncola),
err=integer(1),
PACKAGE = "naus")
问题是以下问题,有没有办法从R
调用子程序而不必指定我想要的数组的大小?这是先验的,我不知道nnzc
将会是什么,这是由amubdg
计算的,但要从R
调用它,我需要它来指定它。任何指导将不胜感激。