[R-es] Saludos!!!

daniel daniel319 en gmail.com
Mie Dic 5 22:34:34 CET 2012


La función print.specaccum me parece hace lo que Emilio sugería que
agregaras al final de tu función.

"print.specaccum" <-
    function(x, ...)
{
    cat("Species Accumulation Curve\n")
    cat("Accumulation method:", x$method)
    if (x$method == "random") {
        cat(", with ", ncol(x$perm), " permutations", sep="")
    }
    cat("\n")
    cat("Call:", deparse(x$call), "\n\n")
    mat <- rbind(Sites = x$sites, Richness = x$richness, sd=x$sd)
    colnames(mat) <- rep("", ncol(mat))
    print(mat)
    invisible(x)
}


No se me ocurre otra cosa, o lo agregas al final de tu función o
respetando la class creas tu propia print.xxx (nunca lo hice).

Daniel Merino

El día 5 de diciembre de 2012 16:57, Gabriel Trujillo Paucar
<gabriel_enter en hotmail.com> escribió:
> Gracias por responder Daniel, Emilio!!!!!
>
> He probado con la funcion invisible, pero no me resulta. Mi lista resultante
> de mi funcion sale asi:
>
> ###################################
>
> $sites
> [1] 1 2 3 4
> $mean
> [1] 60.26818 64.40346 65.99976 66.25882
> $sd
> [1] 7.0176634 0.9166756 1.0994990 0.0000000
> $perm
>           [,1]     [,2]     [,3]     [,4]
>  [1,] 48.48485 63.24111 64.83131 66.25882
>  [2,] 48.48485 67.24638 67.25641 66.25882
>  [3,] 65.45455 63.24111 64.83131 66.25882
>  [4,] 64.50000 64.70899 64.83131 66.25882
>  [5,] 65.45455 67.24638 67.25641 66.25882
>  [6,] 65.45455 64.66403 66.89076 66.25882
>  [7,] 48.48485 67.24638 66.89076 66.25882
>  [8,] 48.48485 64.70899 67.25641 66.25882
>  [9,] 48.48485 63.24111 64.83131 66.25882
> [10,] 64.50000 63.01994 64.12955 66.25882
> attr(,"class")
> [1] "taxon.accu"
>
> ############# y su estructura es la siguiente
>
> List of 4
>  $ sites: int [1:4] 1 2 3 4
>  $ mean : num [1:4] 63.6 64.8 65.7 66.3
>  $ sd   : num [1:4] 7.07 1.31 1.27 0
>  $ perm : num [1:10, 1:4] 48.5 65.5 48.5 48.5 65.5 ...
>  - attr(*, "class")= chr "taxon.accu"
>
> ###### a diferencia de la funcion "specaccum" cuyo resultado te da
>
> Species Accumulation Curve
> Accumulation method: exact
> Call: specaccum(comm = data.3)
>
> Sites    1.0000000 2.0000000 3.0 4
> Richness 3.0000000 4.0000000 4.5 5
> sd       0.7071068 0.5773503 0.5 0
>
> Warning message:
> In cor(x > 0) : the standard deviation is zero
>
> ####### y su estructura es
>
> List of 6
>  $ call    : language specaccum(comm = data.3)
>  $ method  : chr "exact"
>  $ sites   : int [1:4] 1 2 3 4
>  $ richness: num [1:4] 3 4 4.5 5
>  $ sd      : num [1:4] 0.707 0.577 0.5 0
>  $ perm    : NULL
>
>  - attr(*, "class")= chr "specaccum"
> Warning message:
> In cor(x > 0) : the standard deviation is zero
>
> ###### quiero que el resultado de mi funcion me de una lista similar a la de
> specaccum con sites richness, sd acomodados asi como se oberva arriba (uno
> debajo del otro sin estar separados por $ y con sus [1] como figura en el
> mio y tambien que no aparesca $perm en el resultado ########
>
> #### El cuerpo de la funcion "specaccum" es la que sigue, pero no he
> encontrado algun comando que permite hacer estos acomodos, casi al final
> introduce la funcion "list" pero sin ningun cambio mas, observen (lo he
> sombreado con negrita) ########
>
> {
>     x <- comm
>     x <- as.matrix(x)
>     x <- x[, colSums(x) > 0, drop = FALSE]
>     n <- nrow(x)
>     p <- ncol(x)
>     if (p == 1) {
>         x <- t(x)
>         n <- nrow(x)
>         p <- ncol(x)
>     }
>     accumulator <- function(x, ind) {
>         rowSums(apply(x[ind, ], 2, cumsum) > 0)
>     }
>     METHODS <- c("collector", "random", "exact", "rarefaction",
>         "coleman")
>     method <- match.arg(method, METHODS)
>     specaccum <- sdaccum <- sites <- perm <- NULL
>     if (n == 1 && method != "rarefaction")
>         message("No actual accumulation since only 1 site provided")
>     switch(method, collector = {
>         sites <- 1:n
>         specaccum <- accumulator(x, sites)
>     }, random = {
>         perm <- array(dim = c(n, permutations))
>         for (i in 1:permutations) {
>             perm[, i] <- accumulator(x, sample(n))
>         }
>         sites <- 1:n
>         specaccum <- apply(perm, 1, mean)
>         sdaccum <- apply(perm, 1, sd)
>     }, exact = {
>         freq <- colSums(x > 0)
>         freq <- freq[freq > 0]
>         f <- length(freq)
>         ldiv <- lchoose(n, 1:n)
>         result <- array(dim = c(n, f))
>         for (i in 1:n) {
>             result[i, ] <- ifelse(n - freq < i, 0, exp(lchoose(n -
>                 freq, i) - ldiv[i]))
>         }
>         sites <- 1:n
>         specaccum <- rowSums(1 - result)
>         if (conditioned) {
>             V <- result * (1 - result)
>             tmp1 <- cor(x > 0)
>             ind <- lower.tri(tmp1)
>             tmp1 <- tmp1[ind]
>             tmp1[is.na(tmp1)] <- 0
>             cv <- numeric(n)
>             for (i in 1:n) {
>                 tmp2 <- outer(sqrt(V[i, ]), sqrt(V[i, ]))[ind]
>                 cv[i] <- 2 * sum(tmp1 * tmp2)
>             }
>             V <- rowSums(V)
>             sdaccum <- sqrt(V + cv)
>         } else {
>             Stot <- specpool(x)[, gamma]
>             sdaccum1 <- rowSums((1 - result)^2)
>             sdaccum2 <- specaccum^2/Stot
>             sdaccum <- sqrt(sdaccum1 - sdaccum2)
>         }
>     }, rarefaction = {
>         freq <- colSums(x)
>         freq <- freq[freq > 0]
>         tot <- sum(freq)
>         ind <- round(seq(tot/n, tot, length = n))
>         result <- matrix(NA, nrow = 2, ncol = n)
>         for (i in 1:n) {
>             result[, i] <- rarefy(t(freq), ind[i], se = TRUE)
>         }
>         specaccum <- result[1, ]
>         sdaccum <- result[2, ]
>         sites <- ind/tot * n
>     }, coleman = {
>         freq <- colSums(x > 0)
>         result <- array(dim = c(n, p))
>         for (i in 1:n) {
>             result[i, ] <- (1 - i/n)^freq
>         }
>         result <- 1 - result
>         sites <- 1:n
>         specaccum <- apply(result, 1, sum)
>         sdaccum <- sqrt(apply(result * (1 - result), 1, sum))
>     })
>     out <- list(call = match.call(), method = method, sites = sites,
>         richness = specaccum, sd = sdaccum, perm = perm)
>     if (method == "rarefaction")
>         out$individuals <- ind
>     class(out) <- "specaccum"
>     out
> }
>
> ########## Agradezco de antemano su ayuda #####
>
>
> Gabriel Antonio Trujillo Paucar
> Estudiante de Biologia
>      997603768
>
>
>
>> Date: Wed, 5 Dec 2012 15:56:29 -0300
>> Subject: Re: [R-es] Saludos!!!
>> From: daniel319 en gmail.com
>> To: gabriel_enter en hotmail.com
>
>>
>> ¿Te has fijado si hay una función para el print de specaccum en el
>> paquete?
>>
>> Daniel Merino
>>
>>
>> El día 5 de diciembre de 2012 14:31, Gabriel Trujillo Paucar
>> <gabriel_enter en hotmail.com> escribió:
>> >
>> > Saludos a todos!!!
>> >
>> > Estoy creando una funcion que al final me bote una lista de 4 elementos,
>> > pero que solo muestre 3 de ellos parecido a la siguiente funcion ya creada
>> > en R
>> >
>> > ###########################################
>> >
>> >>library(vegan)
>> >>data(BCI)
>> >>specaccum(BCI,method="random")
>> >
>> > Species Accumulation Curve
>> > Accumulation method: exact
>> > Call: specaccum(comm = BCI)
>> >
>> > Sites 1.000000 2.000000 3.000000 4.000000 5.000000 6.000000
>> > Richness 90.780000 121.609796 139.045867 150.711568 159.236344
>> > 165.830621
>> > sd 6.934811 7.193362 7.001993 6.635769 6.248117 5.894738
>> >
>> > Sites 7.00000 8.000000 9.000000 10.000000 11.000000 12.000000
>> > Richness 171.14214 175.553185 179.305613 182.560444 185.429166
>> > 187.991422
>> > sd 5.59124 5.337029 5.125867 4.950143 4.802556 4.676742
>> >
>> > Sites 13.000000 14.000000 15.000000 16.000000 17.000000 18.000000
>> > Richness 190.305605 192.415490 194.354543 196.148792 197.818788
>> > 199.380984
>> > sd 4.567412 4.470298 4.382021 4.299949 4.222057 4.146805
>> >
>> > Sites 19.000000 20.000000 21.000000 22.000000 23.000000 24.000000
>> > Richness 200.848707 202.232871 203.542501 204.785122 205.967066
>> > 207.093696
>> > sd 4.073037 3.999894 3.926745 3.853133 3.778725 3.703284
>> >
>> > Sites 25.000000 26.000000 27.000000 28.000000 29.000000 30.000000
>> > Richness 208.169590 209.198683 210.184380 211.129646 212.037082
>> > 212.908981
>> > sd 3.626634 3.548645 3.469209 3.388235 3.305631 3.221301
>> >
>> > Sites 31.000000 32.000000 33.000000 34.000000 35.000000 36.00000
>> > Richness 213.747382 214.554104 215.330782 216.078894 216.799782
>> > 217.49467
>> > sd 3.135138 3.047015 2.956781 2.864256 2.769223 2.67142
>> >
>> > Sites 37.00000 38.000000 39.000000 40.000000 41.000000 42.000000
>> > Richness 218.16469 218.810871 219.434176 220.035497 220.615665
>> > 221.175459
>> > sd 2.57053 2.466167 2.357857 2.245008 2.126874 2.002491
>> >
>> > Sites 43.000000 44.000000 45.000000 46.000000 47.000000 48.0000000
>> > Richness 221.715608 222.236800 222.739685 223.224876 223.692959
>> > 224.1444898
>> > sd 1.870578 1.729378 1.576348 1.407647 1.216392 0.9916025
>> >
>> > Sites 49.0000000 50
>> > Richness 224.5800000 225
>> > sd 0.6954135 0
>> > Warning message:
>> > In cor(x > 0) : the standard deviation is zero
>> >
>> > #####################################################
>> > ###### Como se oberva el resultado bota valores de sites, richness y sd
>> > "alineados" uno con el ######otro a cual ####corresponde. Si ponen la
>> > estructura de este objeto tendran
>> > #####################################################
>> >
>> >>str(specaccum(BCI,method="random"))
>> >
>> > List of 6
>> > $ call : language specaccum(comm = BCI, method = "random")
>> > $ method : chr "random"
>> > $ sites : int [1:50] 1 2 3 4 5 6 7 8 9 10 ...
>> > $ richness: num [1:50] 91 121 139 151 159 ...
>> > $ sd : num [1:50] 6.73 7.02 6.65 6.23 5.14 ...
>> > $ perm : num [1:50, 1:100] 94 129 141 156 161 168 173 177 178 181 ...
>> > - attr(*, "class")= chr "specaccum"
>> >
>> > ###################################################
>> > ###### Ese objeto resultante es una lista de 6 elementos, sin embargo
>> > cuando lo colocas como resultado no muestra $perm como se observa cuando
>> > corres la funcion "specaccum", solo muestra call, method, sites, richnness,
>> > sd. Asi es como me gustaria poder hacer para mi funcion, y ademas para que
>> > los valores de sites, richnness y sd salgan alineados uno con el otro. Me
>> > gustaria que tipo de saber que tipo de comando podria usar para que cuando
>> > corra la funcion creada no muestre "$perm" y los otro valores salgan
>> > alineados. He revisado el cuerpo de la funcion specaccum y la he puesto
>> > parecida a la mia y no he visto diferencias, tampoco he encontrado algun
>> > comando que le ordene a funcion ocultar el $perm
>> >
>> > ###################################################
>> >
>> > Agradezco de antemano su ayuda
>> >
>> > Gabriel Antonio Trujillo Paucar
>> > Estudiante de Biologia
>> > 997603768
>> >
>> >
>> > [[alternative HTML version deleted]]
>> >
>> > _______________________________________________
>> > R-help-es mailing list
>> > R-help-es en r-project.org
>> > https://stat.ethz.ch/mailman/listinfo/r-help-es
>>
>>
>>
>> --
>> Daniel



-- 
Daniel



Más información sobre la lista de distribución R-help-es