Thanks Bert for the explanation about identical.

For the vectorize.args, note that vectorize.args is not a function but an variable that is unknown in the namespace nlWaldTest.

> nlWaldTest::vectorize.args
Erreur : 'vectorize.args' n'est pas un objet exporté depuis 'namespace:nlWaldTest'


Furthermore, if the function is created from a copy of the original one:

smartsub <- getFromNamespace(".smartsub", ns="nlWaldTest")

or if it is created manually: by copy-paste of the code:

smartsub2 <- function (pat, repl, x)
 {
     args <- lapply(as.list(match.call())[-1L], eval, parent.frame())
     names <- if (is.null(names(args)))
         character(length(args))
     else names(args)
     dovec <- names %in% vectorize.args
do.call("mapply", c(FUN = FUN, args[dovec], MoreArgs = list(args[!dovec]),
                         SIMPLIFY = SIMPLIFY, USE.NAMES = USE.NAMES))
 }

Both are defined in the global env, but the first one works and not the second one.

I am surprised and don't understand how it is possible.

Sincerely

Marc Girondot

2. You need to review how namespaces work. From the "Writing R
extensions" manual:

"The namespace controls the search strategy for variables used by
**functions in the package**. If not found locally, R searches the
package namespace first, then the imports, then the base namespace and
then the normal search path."

So if vectorize.args() is among the package functions, it will be
found by package functions but not by those you write unless
specifically qualified by :: or ::: depending on whether it is
exported.

Cheers,
Bert



Bert Gunter

"The trouble with having an open mind is that people keep coming along
and sticking things into it."
-- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )


On Thu, Feb 2, 2017 at 6:30 AM, Marc Girondot via R-help
<r-help@r-project.org> wrote:
Dear experts,

In the package nlWaldTest, there is an hidden function : .smartsub

I can use it, for example:

getFromNamespace(".smartsub", ns="nlWaldTest")(pat="x", repl="b" ,
x="essai(b[1], b[2], x[1])")
[1] "essai(b[1], b[2], b[1])"

Now I try to create this function in my global environment:
smartsub <- getFromNamespace(".smartsub", ns="nlWaldTest")

It works also:
smartsub(pat="x", repl="b" , x="essai(b[1], b[2], x[1])")
[1] "essai(b[1], b[2], b[1])"

But if I create the function manually:
smartsub2 <- function (pat, repl, x)
  {
      args <- lapply(as.list(match.call())[-1L], eval, parent.frame())
      names <- if (is.null(names(args)))
          character(length(args))
      else names(args)
      dovec <- names %in% vectorize.args
      do.call("mapply", c(FUN = FUN, args[dovec], MoreArgs =
list(args[!dovec]),
                          SIMPLIFY = SIMPLIFY, USE.NAMES = USE.NAMES))
  }
smartsub2(pat="x", repl="b" , x="essai(b[1], b[2], x[1])")
Error in names %in% vectorize.args : objet 'vectorize.args' introuvable

It fails because vectorize.args is unknown

Indeed smartsub2 is different from smartsub.
identical(smartsub, smartsub2)
[1] FALSE

1/ Why are they different? They are just a copy of each other.

2/ Second question, vectorize.args is indeed not defined before to be used
in the function. Why no error is produced in original function?

Thanks a lot

Marc


--

__________________________________________________________
Marc Girondot, Pr

Laboratoire Ecologie, Systématique et Evolution
Equipe de Conservation des Populations et des Communautés
CNRS, AgroParisTech et Université Paris-Sud 11 , UMR 8079
Bâtiment 362
91405 Orsay Cedex, France

Tel:  33 1 (0)1.69.15.72.30   Fax: 33 1 (0)1.69.15.73.53
e-mail: marc.giron...@u-psud.fr
Web: http://www.ese.u-psud.fr/epc/conservation/Marc.html
Skype: girondot

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to