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?





brian




On Wed, Apr 10, 2013 at 3:53 PM, Duncan Murdoch <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 mailing list
>> https://stat.ethz.ch/mailman/**listinfo/r-devel<https://stat.ethz.ch/mailman/listinfo/r-devel>
>>
>
>

        [[alternative HTML version deleted]]

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

Reply via email to