Muchas gracias Eva.
Manuel
2013/7/5 Eva Prieto Castro <evapcastro@yahoo.es>
> Hola, Manuel:
>
> Si descomprimes el tar.gz indicado por Marcuzzi, y accedes a la subcarpeta
> R, en el archivo legends.R buscas la cadena p-value, y en el archivo
> strucplot.R es donde creo que modificas el "Pearson residuals"
(busca por
> "Pearson\nresiduals").
>
> Saludos.
> Eva
>
>
> ------------------------------
> *De:* Manuel Spínola <mspinola10@gmail.com>
> *Para:* "Marcuzzi, Javier Rubén"
<javier.ruben.marcuzzi@gmail.com>
> *CC:* R <r-help-es@r-project.org>
> *Enviado:* Viernes 5 de julio de 2013 0:45
> *Asunto:* Re: [R-es] Modificar una función de un paquete
>
> Muchas gracias Javier,
>
> Lo que yo quiero es cambiar el título de la leyenda que dice "Pearson
> residuals" a español "Residuales de Pearson", pero no me doy
cuenta como.
> También en lugar de "p-value", que diga "Valor de P".
Es posible?
>
> Manuel
>
>
> 2013/7/4 Marcuzzi, Javier Rubén <javier.ruben.marcuzzi@gmail.com>
>
> > Estimado Manuel Spíndola
> >
> > Del repositorio r descargo el paquete, me refiero a:
> > Package source: vcd_1.2-13.tar.gz
> >
> > Descomprimo y busco el archivo que creo conveniente, en este caso
copio y
> > pego el código de mosaicplot
> >
> > A partir de ahí el trabajo es interpretar el código, copiar la parte
> útil,
> > modificar lo conveniente, en fin, lleva tiempo pero se aprende mucho
de
> esa
> > forma, yo lo realice con otra librería y luego de mucho trabajo obtuve
lo
> > que adecuado a mis necesidades, pero no lo pase a un paquete, lo
guarde
> en
> > archivos R que llamo desde el archivo donde coloco los datos, los
> acomodo,
> > etc.
> >
> > Javier Marcuzzi
> >
> >
> > ##############################**#############################
> > ## mosaicplot
> >
> > mosaic <- function(x, ...)
> > UseMethod("mosaic")
> >
> > mosaic.formula <-
> > function(formula, data = NULL, highlighting = NULL,
> > ..., main = NULL, sub = NULL, subset = NULL, na.action = NULL)
> > {
> > if (is.logical(main) && main)
> > main <- deparse(substitute(data))
> > else if (is.logical(sub) && sub)
> > sub <- deparse(substitute(data))
> >
> > m <- match.call(expand.dots = FALSE)
> > edata <- eval(m$data, parent.frame())
> >
> > fstr <- strsplit(paste(deparse(**formula), collapse =
""), "~")
> > vars <- strsplit(strsplit(gsub(" ", "",
fstr[[1]][2]), "\\|")[[1]],
> "\\+")
> > varnames <- vars[[1]]
> >
> > condnames <- if (length(vars) > 1) vars[[2]] else NULL
> >
> > dep <- gsub(" ", "", fstr[[1]][1])
> > if (is.null(highlighting) && (!dep %in%
c("","Freq"))) {
> > if (all(varnames == ".")) {
> > varnames <- if (is.data.frame(data))
> > colnames(data)
> > else
> > names(dimnames(as.table(data))**)
> > varnames <- varnames[-which(varnames %in% dep)]
> > }
> >
> > varnames <- c(varnames, dep)
> > highlighting <- length(varnames) + length(condnames)
> > }
> >
> >
> > if (inherits(edata, "ftable") || inherits(edata,
"table") ||
> > length(dim(edata)) > 2) {
> > condind <- NULL
> > dat <- as.table(data)
> > if(all(varnames != ".")) {
> > ind <- match(varnames, names(dimnames(dat)))
> > if (any(is.na(ind)))
> > stop(paste("Can't find",
paste(varnames[is.na(ind)], collapse=" /
> > "), "in", deparse(substitute(data))))
> >
> > if (!is.null(condnames)) {
> > condind <- match(condnames, names(dimnames(dat)))
> > if (any(is.na(condind)))
> > stop(paste("Can't find",
paste(condnames[is.na(condind)**],
> > collapse=" / "), "in", deparse(substitute(data))))
> > ind <- c(condind, ind)
> > }
> > dat <- margin.table(dat, ind)
> > }
> > mosaic.default(dat, main = main, sub = sub, highlighting >
highlighting,
> > condvars = if (is.null(condind)) NULL else
> > match(condnames, names(dimnames(dat))), ...)
> > } else {
> > m <- m[c(1, match(c("formula", "data",
"subset", "na.action"),
> > names(m), 0))]
> > m[[1]] <- as.name("xtabs")
> > m$formula <-
> > formula(paste(if("Freq" %in% colnames(data))
"Freq",
> > "~",
> > paste(c(condnames, varnames), collapse =
"+")))
> > tab <- eval(m, parent.frame())
> > mosaic.default(tab, main = main, sub = sub, highlighting >
> highlighting, ...)
> > }
> > }
> >
> > mosaic.default <- function(x, condvars = NULL,
> > split_vertical = NULL, direction = NULL,
> > spacing = NULL, spacing_args = list(),
> > gp = NULL, expected = NULL, shade = NULL,
> > highlighting = NULL,
> > highlighting_fill = grey.colors,
> > highlighting_direction = NULL,
> > zero_size = 0.5,
> > zero_split = FALSE,
> > zero_shade = NULL,
> > zero_gp = gpar(col = 0),
> > panel = NULL,
> > main = NULL, sub = NULL, ...) {
> > zero_shade <- !is.null(shade) && shade ||
!is.null(expected) ||
> > !is.null(gp)
> > if (!is.null(shade) && !shade) zero_shade = FALSE
> >
> > if (is.logical(main) && main)
> > main <- deparse(substitute(x))
> > else if (is.logical(sub) && sub)
> > sub <- deparse(substitute(x))
> >
> > if (is.structable(x)) {
> > if (is.null(direction) && is.null(split_vertical))
> > split_vertical <- attr(x, "split_vertical")
> > x <- as.table(x)
> > }
> > if (is.null(split_vertical))
> > split_vertical <- FALSE
> >
> > dl <- length(dim(x))
> >
> > ## splitting argument
> > if (!is.null(direction))
> > split_vertical <- direction == "v"
> > if (length(split_vertical) == 1)
> > split_vertical <- rep(c(split_vertical, !split_vertical),
length.out > > dl)
> > if (length(split_vertical) < dl)
> > split_vertical <- rep(split_vertical, length.out = dl)
> >
> > ## highlighting
> > if (!is.null(highlighting)) {
> > if (is.character(highlighting))
> > highlighting <- match(highlighting, names(dimnames(x)))
> > if (length(highlighting) > 0) {
> > if (is.character(condvars))
> > condvars <- match(condvars, names(dimnames(x)))
> > x <- if (length(condvars) > 0)
> > aperm(x, c(condvars, seq(dl)[-c(condvars,**highlighting)],
> > highlighting))
> > else
> > aperm(x, c(seq(dl)[-highlighting], highlighting))
> > if (is.null(spacing))
> > spacing <- spacing_highlighting
> > if (is.function(highlighting_**fill))
> > highlighting_fill <- rev(highlighting_fill(dim(x)[**dl]))
> > if (is.null(gp))
> > gp <- gpar(fill = highlighting_fill)
> > if (!is.null(highlighting_**direction)) {
> > split_vertical[dl] <- highlighting_direction %in%
c("left",
> "right")
> > if (highlighting_direction %in% c("left",
"top")) {
> > ## ugly:
> > tmp <- as.data.frame.table(x)
> > tmp[,dl] <- factor(tmp[,dl], rev(levels(tmp[,dl])))
> > x <- xtabs(Freq ~ ., data = tmp)
> > gp <- gpar(fill = rev(highlighting_fill))
> > }
> > }
> > }
> > }
> >
> > ## Conditioning only
> > if (!is.null(condvars)) {
> > if (is.character(condvars))
> > condvars <- match(condvars, names(dimnames(x)))
> > if (length(condvars) > 0)
> > x <- aperm(x, c(condvars, seq(dl)[-condvars]))
> >
> > if (is.null(spacing))
> > spacing <- spacing_conditional
> > }
> >
> > ## spacing argument
> > if (is.null(spacing))
> > spacing <- if (dl < 3) spacing_equal else spacing_increase
> >
> > strucplot(x,
> > condvars = if (is.null(condvars)) NULL else
length(condvars),
> > core = struc_mosaic(zero_size = zero_size, zero_split >
> zero_split,
> > zero_shade = zero_shade, zero_gp = zero_gp, panel =
panel),
> > split_vertical = split_vertical,
> > spacing = spacing,
> > spacing_args = spacing_args,
> > gp = gp,
> > expected = expected,
> > shade = shade,
> > main = main,
> > sub = sub,
> > ...)
> > }
> >
> > ## old code: more elegant, but less performant
> > ##
> > ## struc_mosaic2 <- function(zero_size = 0.5, zero_split = FALSE,
> > ## zero_shade = TRUE, zero_gp = gpar(col =
0))
> > ## function(residuals, observed, expected = NULL, spacing, gp,
> > split_vertical, prefix = "") {
> > ## dn <- dimnames(observed)
> > ## dnn <- names(dn)
> > ## dx <- dim(observed)
> > ## dl <- length(dx)
> >
> > ## ## split workhorse
> > ## zerostack <- character(0)
> > ## split <- function(x, i, name, row, col, zero) {
> > ## cotab <- co_table(x, 1)
> > ## margin <- sapply(cotab, sum)
> > ## v <- split_vertical[i]
> > ## d <- dx[i]
> >
> > ## ## compute total cols/rows and build split layout
> > ## dist <- unit.c(unit(margin, "null"),
spacing[[i]])
> > ## idx <- matrix(1:(2 * d), nrow = 2, byrow = TRUE)[-2 * d]
> > ## layout <- if (v)
> > ## grid.layout(ncol = 2 * d - 1, widths = dist[idx])
> > ## else
> > ## grid.layout(nrow = 2 * d - 1, heights = dist[idx])
> > ## vproot <- viewport(layout.pos.col = col, layout.pos.row =
row,
> > ## layout = layout, name > >
remove_trailing_comma(name))
> >
> > ## ## next level: either create further splits, or final
viewports
> > ## name <- paste(name, dnn[i], "=", dn[[i]],
",", sep = "")
> > ## row <- col <- rep.int(1, d)
> > ## if (v) col <- 2 * 1:d - 1 else row <- 2 * 1:d - 1
> > ## f <- if (i < dl)
> > ## function(m) {
> > ## co <- cotab[[m]]
> > ## z <- mean(co) <= .Machine$double.eps
> > ## if (z && !zero && !zero_split) zerostack
<<- c(zerostack,
> > name[m])
> > ## split(co, i + 1, name[m], row[m], col[m], z &&
!zero_split)
> > ## }
> > ## else
> > ## function(m) {
> > ## if (cotab[[m]] <= .Machine$double.eps && !zero)
> > ## zerostack <<- c(zerostack, name[m])
> > ## viewport(layout.pos.col = col[m], layout.pos.row = row[m],
> > ## name = remove_trailing_comma(name[m])**)
> > ## }
> > ## vpleaves <- structure(lapply(1:d, f), class =
c("vpList",
> > "viewport"))
> >
> > ## vpTree(vproot, vpleaves)
> > ## }
> >
> > ## ## start spltting on top, creates viewport-tree
> > ## pushViewport(split(observed + .Machine$double.eps,
> > ## i = 1, name = paste(prefix,
"cell:", sep = ""),
> > ## row = 1, col = 1, zero = FALSE))
> >
> > ## ## draw rectangles
> > ## mnames <- apply(expand.grid(dn), 1,
> > ## function(i) paste(dnn, i,
collapse=",", sep > "=")
> > ## )
> > ## zeros <- observed <= .Machine$double.eps
> >
> > ## ## draw zero cell lines
> > ## for (i in remove_trailing_comma(**zerostack)) {
> > ## seekViewport(i)
> > ## grid.lines(x = 0.5)
> > ## grid.lines(y = 0.5)
> > ## if (!zero_shade && zero_size > 0) {
> > ## grid.points(0.5, 0.5, pch = 19, size = unit(zero_size,
"char"),
> > ## gp = zero_gp,
> > ## name = paste(prefix, "disc:",
mnames[i], sep = ""))
> > ## grid.points(0.5, 0.5, pch = 1, size = unit(zero_size,
"char"),
> > ## name = paste(prefix, "circle:",
mnames[i], sep > > ""))
> > ## }
> > ## }
> >
> > ## # draw boxes
> > ## for (i in seq_along(mnames)) {
> > ## seekViewport(paste(prefix, "cell:", mnames[i], sep =
""))
> > ## gpobj <- structure(lapply(gp, function(x) x[i]), class =
"gpar")
> > ## if (!zeros[i]) {
> > ## grid.rect(gp = gpobj, name = paste(prefix,
"rect:", mnames[i],
> > sep = ""))
> > ## } else {
> > ## if (zero_shade && zero_size > 0) {
> > ## grid.points(0.5, 0.5, pch = 19, size = unit(zero_size,
> > "char"),
> > ## gp = gpar(col = gp$fill[i]),
> > ## name = paste(prefix, "disc:",
mnames[i], sep > > ""))
> > ## grid.points(0.5, 0.5, pch = 1, size = unit(zero_size,
> "char"),
> > ## name = paste(prefix, "circle:",
mnames[i], sep > > ""))
> > ## }
> > ## }
> > ## }
> > ## }
> > ## class(struc_mosaic2) <- "grapcon_generator"
> >
> > struc_mosaic <- function(zero_size = 0.5, zero_split = FALSE,
> > zero_shade = TRUE, zero_gp = gpar(col = 0),
> > panel = NULL)
> > function(residuals, observed, expected = NULL,
> > spacing, gp, split_vertical, prefix = "") {
> > dn <- dimnames(observed)
> > dnn <- names(dn)
> > dx <- dim(observed)
> > dl <- length(dx)
> >
> > zeros <- function(gp, name) {
> > grid.lines(x = 0.5)
> > grid.lines(y = 0.5)
> > if (zero_size > 0) {
> > grid.points(0.5, 0.5, pch = 19, size = unit(zero_size,
"char"),
> > gp = gp, name = paste(prefix, "disc:",
name, sep > ""))
> > grid.points(0.5, 0.5, pch = 1, size = unit(zero_size,
"char"),
> > name = paste(prefix, "circle:", name, sep
= ""))
> > }
> > }
> >
> > ## split workhorse
> > zerostack <- character(0)
> > split <- function(x, i, name, row, col, zero, index) {
> > cotab <- co_table(x, 1)
> > margin <- sapply(cotab, sum)
> > margin[margin == 0] <- .Machine$double.eps
> > # margin <- margin + .Machine$double.eps
> > v <- split_vertical[i]
> > d <- dx[i]
> >
> > ## compute total cols/rows and build split layout
> > dist <- if (d > 1)
> > unit.c(unit(margin, "null"), spacing[[i]])
> > else
> > unit(margin, "null")
> > idx <- matrix(1:(2 * d), nrow = 2, byrow = TRUE)[-2 * d]
> > layout <- if (v)
> > grid.layout(ncol = 2 * d - 1, widths = dist[idx])
> > else
> > grid.layout(nrow = 2 * d - 1, heights = dist[idx])
> > pushViewport(viewport(layout.**pos.col = col, layout.pos.row =
row,
> > layout = layout, name = paste(prefix,
"cell:",
> >
remove_trailing_comma(name),
> > sep = "")))
> >
> > ## next level: either create further splits, or final viewports
> > row <- col <- rep.int(1, d)
> > if (v) col <- 2 * 1:d - 1 else row <- 2 * 1:d - 1
> > for (m in 1:d) {
> > nametmp <- paste(name, dnn[i], "=", dn[[i]][m],
",", sep = "")
> > if (i < dl) {
> > co <- cotab[[m]]
> >
> > ## zeros
> > z <- mean(co) <= .Machine$double.eps
> > split(co, i + 1, nametmp, row[m], col[m],
> > z && !zero_split, cbind(index, m))
> > if (z && !zero && !zero_split &&
!zero_shade && (zero_size > 0))
> > zeros(zero_gp, nametmp)
> > } else {
> > pushViewport(viewport(layout.**pos.col = col[m],
> > layout.pos.row = row[m],
> > name = paste(prefix, "cell:",
> > remove_trailing_comma(nametmp)**, sep
> > "")))
> >
> > ## zeros
> > if (cotab[[m]] <= .Machine$double.eps && !zero) {
> > zeros(if (!zero_shade) zero_gp else gpar(col > >
gp$fill[cbind(index,m)]), nametmp)
> > } else {
> > ## rectangles
> > gpobj <- structure(lapply(gp, function(x) x[cbind(index,
m)]),
> > class = "gpar")
> > nam <- paste(prefix, "rect:",
> > remove_trailing_comma(nametmp)**, sep =
"")
> > if (!is.null(panel))
> > panel(residuals, observed, expected, c(cbind(index,
m)),
> > gpobj, nam)
> > else
> > grid.rect(gp = gpobj, name = nam)
> > }
> > }
> > upViewport(1)
> > }
> > }
> >
> > ## start splitting on top, creates viewport-tree
> > split(observed, i = 1, name = "", row = 1, col = 1,
> > zero = FALSE, index = cbind())
> > }
> > class(struc_mosaic) <- "grapcon_generator"
> >
> > -----Original Message----- From: Manuel Spínola
> > Sent: Thursday, July 04, 2013 7:01 PM
> > To: R
> > Subject: [R-es] Modificar una función de un paquete
> >
> >
> > Estimados miembros de la lista.
> >
> > Estoy trabajando con la función mosaic del paquete vcd. Cómo puedo
hacer
> > para ver el contenido fe la función y modificar algunos de sus
> argumentos?
> >
> > Muchas gracias,
> >
> > Manuel
> >
> > --
> > *Manuel Spínola, Ph.D.*
> >
> > Instituto Internacional en Conservación y Manejo de Vida Silvestre
> > Universidad Nacional
> > Apartado 1350-3000
> > Heredia
> > COSTA RICA
> > mspinola@una.ac.cr
> > mspinola10@gmail.com
> > Teléfono: (506) 2277-3598
> > Fax: (506) 2237-7036
> > Personal website: Lobito de río <https://sites.google.com/**
> > site/lobitoderio/
<https://sites.google.com/site/lobitoderio/>>
> > Institutional website: ICOMVIS <http://www.icomvis.una.ac.cr/**>
> >
> > [[alternative HTML version deleted]]
> >
> >
> >
> >
> >
> >
> >
> > ______________________________**_________________
> > R-help-es mailing list
> > R-help-es@r-project.org
> > https://stat.ethz.ch/mailman/**listinfo/r-help-es<
> https://stat.ethz.ch/mailman/listinfo/r-help-es>
> >
>
>
>
> --
> *Manuel Spínola, Ph.D.*
> Instituto Internacional en Conservación y Manejo de Vida Silvestre
> Universidad Nacional
> Apartado 1350-3000
> Heredia
> COSTA RICA
> mspinola@una.ac.cr
> mspinola10@gmail.com
> Teléfono: (506) 2277-3598
> Fax: (506) 2237-7036
> Personal website: Lobito de río <
> https://sites.google.com/site/lobitoderio/>
> Institutional website: ICOMVIS <http://www.icomvis.una.ac.cr/>
>
> [[alternative HTML version deleted]]
>
> _______________________________________________
> R-help-es mailing list
> R-help-es@r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>
>
--
*Manuel Spínola, Ph.D.*
Instituto Internacional en Conservación y Manejo de Vida Silvestre
Universidad Nacional
Apartado 1350-3000
Heredia
COSTA RICA
mspinola@una.ac.cr
mspinola10@gmail.com
Teléfono: (506) 2277-3598
Fax: (506) 2237-7036
Personal website: Lobito de río
<https://sites.google.com/site/lobitoderio/>
Institutional website: ICOMVIS <http://www.icomvis.una.ac.cr/>
[[alternative HTML version deleted]]