# [R] Conflict between xtable and Hmisc when using Sweave?

Sander Oom sander at oomvanlieshout.net
Mon May 16 16:25:30 CEST 2005

I tried to follow your suggestions, but without success:

Error: couldn't find function "xtable.mylabel<-"

... resulting from the code below.

Any suggestions?

Thanks,

Sander.

library(xtable)
xtable.mylabel <- get("label", "package:xtable")
library(Hmisc) # provides summarize

set.seed(1)
temperature <- rnorm(300, 70, 10)
month <- sample(1:12, 300, TRUE)
year  <- sample(2000:2001, 300, TRUE)
g <- function(x)c(Mean=mean(x,na.rm=TRUE),Median=median(x,na.rm=TRUE))
summarize(temperature, month, g)

## From Venables and Ripley (2002) p.165.
N <- c(0,1,0,1,1,1,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,1,0,0)
P <- c(1,1,0,0,0,1,0,1,1,1,0,0,0,1,0,1,1,0,0,1,0,1,1,0)
K <- c(1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,0,0,1,1,1,0,1,0)
yield <-c(49.5,62.8,46.8,57.0,59.8,58.5,55.5,56.0,
62.8,55.8,69.5,55.0,
62.0,48.8,45.5,44.2,52.0,
51.5,49.8,48.8,57.2,59.0,53.2,56.0)
npk <- data.frame(block=gl(6,4), N=factor(N), P=factor(P),
K=factor(K), yield=yield)
## to show the effects of re-ordering terms contrast the two fits
tmpAov <- aov(yield ~ block + N * P + K, npk)
tmpTable <- xtable (tmpAov ,
caption="ANOVA table for vegetation height.")
xtable.mylabel(tmpTable) <- paste("tab:AnovaHeight")
print.xtable(tmpTable, type="latex", floating=TRUE,
table.placement="h", caption.placement="top",
latex.environments=c("center"),
title=first.word(deparse(substitute(object))),
append=FALSE
)

Liaw, Andy wrote:
> You need to add the namespace to the source package, by adding a NAMESPACE
> file.  There's an R News article by Prof. Tierney on how to do this.  Also
> see the Writing R Extensions' manual.  You should get the package
> maintainer to do that, as that constitute a change in the package source
> code.
>
> Short of that, you should make sure that Hmisc is loaded later than xtable,
> and use something like what Gabor suggested to access label() in xtable.  (I
> would use some other name, though: label() in xtable is already an S3
> generic).
>
> Andy
>
>>From: Sander Oom
>>
>>Hi Andy and Gabor,
>>
>>Thanks for your help so far! I am discovering another R dimension.
>>
>>Trying to put my head around all this....the conflict
>>actually exposes
>>itself when calling summarize(Hmisc). Summarize(Hmisc) calls label
>>internally, so I can not call it explicitly. Simply calling
>>label(xtable) explicitly will not solve the problem with
>>summarize(Hmisc).
>>
>>Thus, I should use namespaces as Andy is suggesting. Now I
>>just need to
>>know how I 'add namespace' to a library? Does 'loadNamespace' have
>>something to do with it?
>>
>>Thanks very much for your help!
>>
>>Sander.
>>
>>
>>## From Venables and Ripley (2002) p.165.
>>N <- c(0,1,0,1,1,1,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,1,0,0)
>>P <- c(1,1,0,0,0,1,0,1,1,1,0,0,0,1,0,1,1,0,0,1,0,1,1,0)
>>K <- c(1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,0,0,1,1,1,0,1,0)
>>yield <-c(49.5,62.8,46.8,57.0,59.8,58.5,55.5,56.0,
>>       62.8,55.8,69.5,55.0,
>>       62.0,48.8,45.5,44.2,52.0,
>>       51.5,49.8,48.8,57.2,59.0,53.2,56.0)
>>npk <- data.frame(block=gl(6,4), N=factor(N), P=factor(P),
>>                   K=factor(K), yield=yield)
>>## to show the effects of re-ordering terms contrast the two fits
>>tmpAov <- aov(yield ~ block + N * P + K, npk)
>>tmpTable <- xtable(tmpAov , caption="Test export of ANOVA table.",
>>   label="tab:Anova")
>>print.xtable(tmpTable, type="latex", floating=TRUE,
>>   table.placement="h", caption.placement="top",
>>   latex.environments=c("center"))
>>
>>Alternatively, using namespace for xtable:
>>
>>tmpTable <- xtable(tmpAov , caption="Test export of ANOVA table.")
>>xtable:::label(tmpTable) <- paste("tab:Anova")
>>print.xtable(tmpTable, type="latex", floating=TRUE,
>>   table.placement="ht", caption.placement="top",
>>   latex.environments=c("center"))
>>
>>
>>
>>Gabor Grothendieck wrote:
>>>Even without a namespace one could explicitly reference the label
>>>in xtable via:
>>>
>>>xtable.label <- get("label", "package:xtable")
>>>
>>>On 5/16/05, Liaw, Andy <andy_liaw at merck.com> wrote:
>>>>One possible solution without renaming the functions is to
>>>>either xtable or Hmisc.  Given the size of Hmisc, it
>>probably would be much
>>>>easier to do that with xtable.
>>>>
>>>>With namespace in xtable, you can do xtable:::label() to
>>refer to the
>>>>label() in xtable specifically.
>>>>
>>>>Andy
>>>>
>>>>>From: Of Sander Oom
>>>>>
>>>>>Dear David,
>>>>>
>>>>>I would like to use summarize(Hmisc) and print.xtable(xtable) in a
>>>>>single Sweave document, but a conflict with the 'label' function
>>>>>prohibits this at the moment!
>>>>>
>>>>>Would you be able to correct the conflicting code? I will
>>>>>the new package!
>>>>>
>>>>>I have tried latex(Hmisc) to export the anova table, but
>>>>>results are not
>>>>>promising! I prefer xtable!!
>>>>>
>>>>>Thanks,
>>>>>
>>>>>Sander.
>>>>>
>>>>>Frank E Harrell Jr wrote:
>>>>>>Sander Oom wrote:
>>>>>>>Dear Frank,
>>>>>>>
>>>>>>>I have a Sweave document in which I export anova (aov)
>>>>>tables to Latex
>>>>>>>and calculate some summary statistics with summarize{Hmisc} for a
>>>>>>>graph (as in the example below).
>>>>>>>
>>>>>>>I currently use the following code for the aov tables:
>>>>>>><<results=tex>>=
>>>>>>> tmp <- datGrassHC[datGrassHC$Loc > 0 & datGrassHC$Loc < 9 ,]
>>>>>>> tmpAov <- aov(Height~Geology*Altitude*Origin*BinInOut
>>, data=tmp)
>>>>>>> tmpTable <- xtable (tmpAov ,
>>>>>>>   caption="ANOVA table for vegetation height.",
>>>>>>>   label="tab:AnovaHeight"
>>>>>>>   )
>>>>>>> print.xtable(tmpTable, type="latex", floating=TRUE,
>>>>>>>   table.placement="ht", caption.placement="top",
>>>>>>>   latex.environments=c("center"))
>>>>>>>   )
>>>>>>>@
>>>>>>>
>>>>>>>I used xtables, because it has a working aov example. I
>>>>>would be happy
>>>>>>>to use an alternative if I knew how! Would you have
>>sample code to
>>>>>>>illustrate how to export an aov table to Latex using
>>latex{Hmisc}.
>>>>>>>Thanks very much for your help,
>>>>>>>
>>>>>>>Sander.
>>>>>>>
>>>>>>>Frank E Harrell Jr wrote:
>>>>>>>
>>>>>>>>Sander Oom wrote:
>>>>>>>>
>>>>>>>>>Dear R users,
>>>>>>>>>
>>>>>>>>>The Sweave code below runs fine, as it is. However, an
>>>>>error occurs
>>>>>>>>>when the line 'library(xtable)' is uncommented:
>>>>>>>>>Error:  chunk 1
>>>>>>>>>Error in "label<-"(*tmp*, value = "month") :
>>>>>>>>>       no applicable method for "label<-"
>>>>>>>>>
>>>>>>>>>Is anybody aware of this and knows a workaround?
>>>>>>>>>
>>>>>>>>>Thanks,
>>>>>>>>>
>>>>>>>>>Sander.
>>>>>>>>>
>>>>>>>>>*******************
>>>>>>>>>
>>>>>>>>>\documentclass[a4paper]{article}
>>>>>>>>>\title{Sweave Test for summarize}
>>>>>>>>>\author{Sander Oom}
>>>>>>>>>
>>>>>>>>>\usepackage{a4wide}
>>>>>>>>>
>>>>>>>>>\begin{document}
>>>>>>>>>
>>>>>>>>>\maketitle
>>>>>>>>>
>>>>>>>>>\begin{figure}[ht]
>>>>>>>>>\begin{center}
>>>>>>>>><<fig=TRUE,echo=FALSE>>=
>>>>>>>>> # library(xtable)
>>>>>>>>> library(Hmisc)
>>>>>>>>> set.seed(111)
>>>>>>>>> dfr <- expand.grid(month=1:12, year=c(1997,1998), reps=1:100)
>>>>>>>>> month <- dfr$month >>>>>>>>> year <- dfr$year
>>>>>>>>> y <- abs(month-6.5) + 2*runif(length(month)) + year-1997
>>>>>>>>> s <- summarize(y, llist(month,year), smedian.hilow,
>>>>>conf.int=.5)
>>>>>>>>> print(xYplot(Cbind(y,Lower,Upper) ~ month,
>>groups=year, data=s,
>>>>>>>>>       keys='lines', method='alt', type='b'))
>>>>>>>>>@
>>>>>>>>>\end{center}
>>>>>>>>>\end{figure}
>>>>>>>>>
>>>>>>>>>\end{document}
>>>>>>>>>
>>>>>>>>>************************
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>>version
>>>>>>>>>        _
>>>>>>>>>platform i686-pc-linux-gnu
>>>>>>>>>arch     i686
>>>>>>>>>os       linux-gnu
>>>>>>>>>system   i686, linux-gnu
>>>>>>>>>status
>>>>>>>>>major    2
>>>>>>>>>minor    1.0
>>>>>>>>>year     2005
>>>>>>>>>month    04
>>>>>>>>>day      18
>>>>>>>>>language R
>>>>>>>>>
>>>>>>>>>
>>>>>>>>I feel this is an xtable problem because Hmisc has being
>>>>>using label
>>>>>>>>and label<- since 1991.
>>>>>>>>
>>>>>>>>Frank
>>>>>>>>
>>>>>>There are ways to make functions from one area override those from
>>>>>>another, but the real solution is to ask the xtable author
>>>>>not to have
>>>>>>functions that conflict with the (older) Hmisc package.  -Frank
>>>>>>
>>>>>--
>>>>>--------------------------------------------
>>>>>Dr Sander P. Oom
>>>>>Animal, Plant and Environmental Sciences,
>>>>>University of the Witwatersrand
>>>>>Private Bag 3, Wits 2050, South Africa
>>>>>Tel (work)      +27 (0)11 717 64 04
>>>>>Tel (home)      +27 (0)18 297 44 51
>>>>>Fax             +27 (0)18 299 24 64
>>>>>Email   sander at oomvanlieshout.net
>>>>>Web     www.oomvanlieshout.net/sander
>>>>>
>>>>>______________________________________________
>>>>>R-help at stat.math.ethz.ch mailing list
>>>>>https://stat.ethz.ch/mailman/listinfo/r-help
>>>>>http://www.R-project.org/posting-guide.html
>>>>>
>>>>>
>>>>>
>>>>______________________________________________
>>>>R-help at stat.math.ethz.ch mailing list
>>>>https://stat.ethz.ch/mailman/listinfo/r-help
>>http://www.R-project.org/posting-guide.html
>>--
>>
>>--------------------------------------------
>>Dr Sander P. Oom
>>Animal, Plant and Environmental Sciences,
>>University of the Witwatersrand
>>Private Bag 3, Wits 2050, South Africa
>>Tel (work)      +27 (0)11 717 64 04
>>Tel (home)      +27 (0)18 297 44 51
>>Fax             +27 (0)18 299 24 64
>>Email   sander at oomvanlieshout.net
>>Web     www.oomvanlieshout.net/sander
>>---------------------------------------------
>>
>>
>>
>
>
>
> ------------------------------------------------------------------------------
> Notice:  This e-mail message, together with any attachment...{{dropped}}

`