Hi Duncan,

My most sincere apologies. It's really not my intention to waste anyones
time. More the opposite...for some reason I thought that the problem had to
do with my call to options() and thought that would be enough. Here's
something reproducible:

I built a foo package based on the code under the "----" below. In the
namespace file, I've only exported: trt and cmt (not contr.none and
contr.diff). Notice that cmt calls contr.none and contr.diff by default.

Then in R, I run this code and I get this error message:

library(foo)
set.seed(1)
dd <- data.frame(y = rbinom(100, 1, 0.5), treat = rbinom(100, 1, 0.5), x =
rnorm(100),
                         f = gl(4, 250, labels = c("A", "B", "C", "D")))
dd2 <- cmt(y ~ x + f + trt(treat), data =dd)
> Error in get(ctr, mode = "function", envir = parent.frame()) :
   object 'contr.none' of mode 'function' was not found

Thanks,
Axel.

--------------------------------------------

trt <- function(x) x

cmt <- function(formula, data, subset, na.action = na.pass, cts = TRUE)  {

  if (!inherits(formula, "formula"))
    stop("Method is only for formula objects.")
  mf <- match.call(expand.dots = FALSE)
  args <- match(c("formula", "data", "subset", "na.action"),
                names(mf), 0)
  mf <- mf[c(1, args)]
  mf$drop.unused.levels <- TRUE
  mf[[1]] <- as.name("model.frame")
  special <- "trt"
  mt <- if(missing(data)) terms(formula, special) else terms(formula,
special, data = data)
  mf$formula <- mt
  mf <- eval.parent(mf)
  Terms <- attr(mf, "terms")
  attr(Terms, "intercept") <- 0
  trt.var <- attr(Terms, "specials")$trt
  ct <- mf[, trt.var]
  y <- model.response(mf, "numeric")
  var_names <- attributes(Terms)$term.labels[-(trt.var-1)]
  treat.names <- levels(as.factor(ct))
  oldcontrasts <- unlist(options("contrasts"))
  if (cts)
    options(contrasts = c(unordered = "contr.none", ordered = "contr.diff"))
  x <- model.matrix(terms(reformulate(var_names)),
                    mf, contrasts)
  options(contrasts = oldcontrasts)
  intercept <- which(colnames(x) == "(Intercept)")
  if (length(intercept > 0)) x <- x[, -intercept]
  return(x)
  }

#######################################
# An alternative contrasts function for unordered factors
# Ensures symmetric treatment of all levels of a factor
#######################################
contr.none <- function(n, contrasts) {
  if (length(n) == 1)
    contr.treatment(n, contrasts = n<=2)
  else
    contr.treatment(n, contrasts = length(unique(n))<=2)
}

#######################################
# An alternative contrasts function for ordered factors
# Ensures use of a difference penalty for such factors
#######################################
contr.diff <- function (n, contrasts = TRUE)
{
  if (is.numeric(n) && length(n) == 1) {
    if (n > 1)
      levs <- 1:n
    else stop("not enough degrees of freedom to define contrasts")
  }
  else {
    levs <- n
    n <- length(n)
  }
  contr <- array(0, c(n, n), list(levs, paste(">=", levs, sep="")))
  contr[outer(1:n,1:n, ">=")] <- 1
  if (n < 2)
    stop(gettextf("contrasts not defined for %d degrees of freedom",
                  n - 1), domain = NA)
  if (contrasts)
    contr <- contr[, -1, drop = FALSE]
  contr
}



On Sun, Jan 26, 2014 at 1:21 PM, Duncan Murdoch <murdoch.dun...@gmail.com>wrote:

> On 14-01-25 6:05 PM, Axel Urbiz wrote:
>
>> Thanks again all. Essentially, this is the section of the code that is
>> causing trouble. This is part of the (exported) function which calls
>> contr.none (not exported). As mentioned, when I call the exported function
>> it complains with the error described before.
>>
>>
>>    oldcontrasts <- unlist(options("contrasts"))
>>      if (cts)
>>          options(contrasts = c(unordered = "contr.none", ordered =
>> "contr.diff"))
>>      x <- model.matrix(terms(reformulate(var_names)), mf, contrasts)
>>      options(contrasts = oldcontrasts)
>>
>
> This is hugely incomplete.  Please stop wasting everyone's time, and post
> something reproducible.
>
> Duncan Murdoch
>
>

        [[alternative HTML version deleted]]

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

Reply via email to