Thanks for your help. I am making great progress, but there are still some
things that are puzzling me.

In the code below, I add a cat() statement to `coef<-.corExp`. Sure enough,
when I run lme(), it prints. (awesome!) However, the function does not seem
to be able to find the C script "spatial_factList". I find that if I replace
"spatial_factList" with "nlme:::spatial_factList" it works, but I am
confused by why it cannot be found in the first case.

Mike

> set.seed(444)
> N <- 100
> x <- round(sin(rep(1:23/2,length.out=N)),digits=2)+1:N*2/N
> y <- round(cos(rep(1:23/2,length.out=N)),digits=2)+1:N*2/N
> g <- rep(1:5,each=N/5)
> a <- round(runif(N,0,10))
> t <- 1:N
> r <- runif(N,0,5)
> e <- 5*sin(4*x) +
+      5*cos(4*y) +
+      5*sin(t) +
+      2*g +
+      a +
+      r
> e <- round(e)
>
> df <- data.frame(x,y,g,a,t,r,e)
> df <- df[-c(22,23,67),]
>
> library(nlme)
> unlockBinding("coef<-.corSpatial",asNamespace("nlme"))
> assignInNamespace("coef<-.corSpatial",
+ `coef<-.corSpatial` <- function (object, ..., value)
+ {
+     cat("coef<-.corExp\n")
+     if (length(value) != length(object)) {
+         stop("Cannot change the length of the parameter after
initialization")
+     }
+     object[] <- value
+     corD <- attr(object, "Dim")
+     aux <- .C(spatial_factList, as.double(as.vector(object)),
+         as.integer(attr(object, "nugget")),
as.double(unlist(getCovariate(object))),
+         as.integer(unlist(corD)), as.double(attr(object, "minD")),
+         factor = double(corD[["sumLenSq"]]), logDet =
double(1))[c("factor",
+         "logDet")]
+     attr(object, "factor") <- aux[["factor"]]
+     attr(object, "logDet") <- -aux[["logDet"]]
+     object
+ },
+ asNamespace("nlme"))
> lockBinding("coef<-.corSpatial",asNamespace("nlme"))
> mymodel <- lme(fixed = e ~ a,random= ~ 1 |
g,data=df,correlation=corExp(c(1,.5),form= ~ x + y | g,
nugget=TRUE),control=list(msVerbose=TRUE,opt="nlminb"))
coef<-.corExp
Error in `coef<-.corSpatial`(`*tmp*`, value = c(0, 0)) :
  object 'spatial_factList' not found

On Tue, Apr 27, 2010 at 4:59 PM, Gabor Grothendieck <ggrothendi...@gmail.com
> wrote:

> You did change it. Try nlme:::corExp
>
> Also note that asNamespace("nlme") is a nicer way to refer to it.
>
> On Tue, Apr 27, 2010 at 4:32 PM, Michael Steven Rooney
> <michael.s.roo...@gmail.com> wrote:
> > Sorry, I am still not understanding this. I tried using the unlock
> binding
> > function, but the function remains unchanged after I attempt an
> assignment:
> >
> >> library(nlme)
> >> bindingIsLocked("corExp",environment(corExp))
> > [1] TRUE
> >> unlockBinding("corExp",environment(corExp))
> >> bindingIsLocked("corExp",environment(corExp))
> > [1] FALSE
> >> assignInNamespace("corExp",
> > + function (value = numeric(0), form = ~1, nugget = FALSE, metric =
> > c("euclidean",
> > +     "maximum", "manhattan"), fixed = FALSE)
> > + {
> > +     cat("corExp\n")  ## SLIGHTLY CHANGE FUNCTION BY ADDING THIS LINE
> > +     attr(value, "formula") <- form
> > +     attr(value, "nugget") <- nugget
> > +     attr(value, "metric") <- match.arg(metric)
> > +     attr(value, "fixed") <- fixed
> > +     class(value) <- c("corExp", "corSpatial", "corStruct")
> > +     value
> > + },
> > + environment(corExp))
> >> corExp
> > function (value = numeric(0), form = ~1, nugget = FALSE, metric =
> > c("euclidean",
> >     "maximum", "manhattan"), fixed = FALSE)
> > {
> >     attr(value, "formula") <- form
> >     attr(value, "nugget") <- nugget
> >     attr(value, "metric") <- match.arg(metric)
> >     attr(value, "fixed") <- fixed
> >     class(value) <- c("corExp", "corSpatial", "corStruct")
> >     value
> > }
> > <environment: namespace:nlme>
> >
> > On Mon, Apr 26, 2010 at 11:25 PM, Gabor Grothendieck
> > <ggrothendi...@gmail.com> wrote:
> >>
> >> See ?lockBinding
> >>
> >> On Mon, Apr 26, 2010 at 11:20 PM, Michael Steven Rooney
> >> <michael.s.roo...@gmail.com> wrote:
> >> > I tried editing the corExp function (added a line) within the nlme
> >> > environment with the following code, but it looks like my declaration
> >> > did
> >> > not have any effect. I am guessing it is locked some how. Is there an
> >> > easy
> >> > way to do this or am I treading into complicated waters? (I just
> picked
> >> > up R
> >> > a year ago, and I don't have any experience in development. Willing to
> >> > learn.)
> >> >
> >> >> assignInNamespace("corExp",
> >> > + function (value = numeric(0), form = ~1, nugget = FALSE, metric =
> >> > c("euclidean",
> >> > +     "maximum", "manhattan"), fixed = FALSE)
> >> > + {
> >> > +     cat("corExp\n")   # I ADDED THIS LINE HERE
> >> > +     attr(value, "formula") <- form
> >> > +     attr(value, "nugget") <- nugget
> >> > +     attr(value, "metric") <- match.arg(metric)
> >> > +     attr(value, "fixed") <- fixed
> >> > +     class(value) <- c("corExp", "corSpatial", "corStruct")
> >> > +     value
> >> > + },
> >> > + environment(corExp))
> >> >> corExp
> >> > function (value = numeric(0), form = ~1, nugget = FALSE, metric =
> >> > c("euclidean",
> >> >     "maximum", "manhattan"), fixed = FALSE)
> >> > {
> >> >     attr(value, "formula") <- form
> >> >     attr(value, "nugget") <- nugget
> >> >     attr(value, "metric") <- match.arg(metric)
> >> >     attr(value, "fixed") <- fixed
> >> >     class(value) <- c("corExp", "corSpatial", "corStruct")
> >> >     value
> >> > }
> >> > <environment: namespace:nlme>
> >> >
> >> >
> >> > On Mon, Apr 26, 2010 at 10:46 PM, Michael Steven Rooney
> >> > <michael.s.roo...@gmail.com> wrote:
> >> >>
> >> >> Thanks.
> >> >>
> >> >> How do I make my function visible to others? Will assignInNamespace
> do
> >> >> that?
> >> >>
> >> >> On Mon, Apr 26, 2010 at 10:23 PM, Gabor Grothendieck
> >> >> <ggrothendi...@gmail.com> wrote:
> >> >>>
> >> >>> See ?assignInNamespace
> >> >>>
> >> >>> On Mon, Apr 26, 2010 at 9:49 PM, Michael Steven Rooney
> >> >>> <michael.s.roo...@gmail.com> wrote:
> >> >>> > Hi,
> >> >>> >
> >> >>> > I am trying to place my own functions in the nlme environment:
> >> >>> >
> >> >>> > The following statement works:
> >> >>> >
> >> >>> > environment(coef.corSPT) <-
> >> >>> > environment(getS3method("coef","corSpatial"))
> >> >>> >
> >> >>> > but this one returns an error:
> >> >>> >
> >> >>> > environment(get("coef<-.corSPT")) <-
> >> >>> > environment(getS3method("coef<-","corSpatial"))
> >> >>> > Error in environment(get("coef<-.corSPT")) <-
> >> >>> > environment(getS3method("coef<-",  :
> >> >>> >  target of assignment expands to non-language object
> >> >>> >
> >> >>> > What should I do?
> >> >>> >
> >> >>> > Thanks.
> >> >>> >
> >> >>> > Mike
> >> >>> >
> >> >>> >        [[alternative HTML version deleted]]
> >> >>> >
> >> >>> > ______________________________________________
> >> >>> > R-help@r-project.org mailing list
> >> >>> > 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.
> >> >>> >
> >> >>
> >> >
> >> >
> >
> >
>

        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list
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