From ligges at statistik.uni-dortmund.de  Wed Dec 28 22:39:54 2005
From: ligges at statistik.uni-dortmund.de (ligges@statistik.uni-dortmund.de)
Date: Wed, 28 Dec 2005 22:39:54 +0100 (CET)
Subject: [Rd] .Call not counting parameters consistently (PR#8450)
Message-ID: <20051228213954.3DD4419A45@slim.kubism.ku.dk>

Duncan Temple Lang wrote:

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> Coincidentally, I am in the process of working on a related aspect of
> symbol resolution.
> 
> The issue is likely to be the caching of native symbols
> that we do. We do not cache the registration information,
> just the address of the routine.  And so the test is not
> repeated.  We can fix this, but it will make things more
> complex. This is a good example of where using the new mechanism
> within namespaces to resolve the symbols when the package
> is loaded and making them into regular R objects that
> are passed to .Call/.C/... makes things more rational.
> In that case, the caching is done in R and type information
> is more directly available.
> 
> 
> Off hand, I don't see why this would behave differently
> on Windows and Unix, so I'd appreciate if you could let
> us know the specific call that raises the error on Windows
> and not on Unix.


In principle, the code where this came up in the tests for the new CRAN 
package fuzzyRankTests is:

   library(fuzzyRankTests)
   set.seed(123)
   mu <- 0
   x <- rnorm(10)
   y <- rnorm(10) + 1.5
   try(.Call("fpvranksum", y, x, mu, "great",
      PACKAGE = "fuzzyRankTests"))

Uwe



> 
> D.
> 
> 
> murdoch at stats.uwo.ca wrote:
> 
>>The R_registerRoutines C function allows the number of parameters to a
>>.Call function to be registered.  For example, the tools package
>>function md5sum() calls "Rmd5", which has been registered to require
>>just one parameter.
>>
>>But if it is called with the wrong number of parameters, only the first
>>error gets caught:
>>
>>  > library(tools)
>>  > .Call("Rmd5",1,2,PACKAGE="tools")
>>Error: Incorrect number of arguments (2), expecting 1 for Rmd5
>>  > .Call("Rmd5",1,2,PACKAGE="tools")
>>Error: argument 'files' must be character
>>
>>This happens in Windows versions of R-patched and R-devel.  Charlie
>>Geyer was bitten by this in his fuzzyRankTests package (version 0.3),
>>which fails check because of it on Windows, but not on Unix.  I haven't
>>done any testing on Unix.
>>
>>I've traced into the do_dotcall function in src/main/dotcode.c, and I
>>see that on the second call the "symbol.symbol.call" member is NULL, so
>>no test is done, but I don't see why this is happening.  The
>>resolveNativeRoutine function does some strange stuff.
>>
>>Duncan Murdoch
>>
>>______________________________________________
>>R-devel at r-project.org mailing list
>>https://stat.ethz.ch/mailman/listinfo/r-devel
> 
> 
> - --
> Duncan Temple Lang                    duncan at wald.ucdavis.edu
> Department of Statistics              work:  (530) 752-4782
> 4210 Mathematical Sciences Building   fax:   (530) 752-7099
> One Shields Ave.
> University of California at Davis
> Davis,
> CA 95616,
> USA
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.2 (Darwin)
> 
> iD8DBQFDsu8Q9p/Jzwa2QP4RAuqGAJ9oHP7lhmb7IN9c/3WoRL5qimCTSACfaNhr
> WFY6NLnh2dfDTOGcaStbgNo=
> =rCZg
> -----END PGP SIGNATURE-----
> 
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



[Rd] .Call not counting parameters consistently (PR#8450)
ligges@statistik.uni-dortmund.de