On 13-04-10 5:35 PM, brian avants wrote:
Thank you for the advice - the function formed like this:

antsImageRead <- function( filename , dimension , pixeltype = "float" )
{
      rval <- (.Call("antsImageRead", filename, pixeltype, dimension))
      return(rval)
}

worked up to R 2.15.x  but fails in R 3.0.x

if i include the PACKAGE = 'whatever' , in the .Call above, as here:

antsImageRead <- function( filename , dimension , pixeltype = "float" )
{
      rval <- (.Call("antsImageRead", filename, pixeltype, dimension,
PACKAGE="ANTsR"))
      return(rval)
}

then it fails in both 2.15.x and 3.0.x ....

if i source the file

source("ANTsR/R/antsImageRead.R")

after loading the library, then it works fine in 3.0.x without the
direct call to PACKAGE=ANTsR.

anyway - i hope this clarifies things a bit -

does anyone know of something that might have changed between 2.x and
3.x that would relate to this issue?

If you can build a Windows binary or a MacOSX binary of the package, or a tarball that the standard tools can install, I'll take a look.

Duncan Murdoch






brian




On Wed, Apr 10, 2013 at 3:53 PM, Duncan Murdoch
<murdoch.dun...@gmail.com <mailto:murdoch.dun...@gmail.com>> wrote:

    On 10/04/2013 2:25 PM, brian avants wrote:

        hi simon

        thank you for your questions ---- answers here:

        I won't answer your question directly but some suggestions:
         > a) does adding PACKAGE="ANTsR" to .Call change anything? (It
        should really
         > be there if you are using strings as names)
         >

        this does change things .... for instance, this works:

        library(ANTsR)
        filename<-getANTsRData('r16')
        .Call("antsImageRead", filename,'double',2) #  Succeeds!
        .Call("antsImageRead", filename,'double',2,PACKAGE=__ANTsR) #
          Fails!
        # Error in .Call("antsImageRead", filename, "double", 2, PACKAGE
        = "ANTsR")
        :
        #  "antsImageRead" not available for .Call() for package "ANTsR"


    That makes it look as though it is finding that entry point
    somewhere other than in the ANTsR.{so|dll} file installed with the
    package.


        the problem is when we call this function:

        antsImageRead <- function( filename , dimension , pixeltype =
        "float" )
        {
              rval <- (.Call("antsImageRead", filename, pixeltype,
        dimension))
              return(rval)
        }


    That's the one where you should be using the PACKAGE declaration.



        the we get the error   antsImageRead not resolved from current
        namespace ,
        e.g.:

         > antsImageRead(filename,2)
        Error in .Call("antsImageRead", filename, pixeltype, dimension) :
            "antsImageRead" not resolved from current namespace (ANTsR)
         >


        b) you may want to consider use the more efficient registration
        - either
         > explicit or in NAMESPACE - so in your case you could use
         > NAMESPACE: useDynLib(ANTsR, antsImageRead, ...)
         > foo.R: .Call(antsImageRead, ...)
         >

        yes - we have all of our shared libraries registered in the
        NAMESPACE file
        e.g.

        useDynLib(libRantsImageRead)


    But this doesn't register the entry point.  List it explicitly, and
    it will create an object called antsImageRead in the package
    namespace that has entry point information.

    Duncan Murdoch


        etcetera ....


                 [[alternative HTML version deleted]]

        ________________________________________________
        R-devel@r-project.org <mailto:R-devel@r-project.org> mailing list
        https://stat.ethz.ch/mailman/__listinfo/r-devel
        <https://stat.ethz.ch/mailman/listinfo/r-devel>




______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to