[R-es] Saludos!!!

Emilio López emilio.lopez en urjc.es
Mie Dic 5 22:59:40 CET 2012


Efectivamente Gabriel, o esto es lo que buscas, o no entiendo el problema:

foo <- function(){
  completeList <- list(a = 1:10,
                       b = letters[1:5],
                       c = data.frame(y = rnorm(100), y =
as.factor(rep(1:4, times = 25))),
                       d = "Please do not print")
  for (i in 1:(length(completeList)-2)){
    cat(paste("This is list", i, ":\n"))
    print(completeList[[i]])
  }
  print(summary(completeList[["c"]]))
  invisible(completeList)

}
foo()
myVar <- foo()
myVar


Saludos,
Emilio

El día 5 de diciembre de 2012 22:34, daniel <daniel319 en gmail.com> escribió:
> 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



-- 
_____________________________________

Emilio L. Cano
http://www.proyectum.es
+34 665 676 225
Department of Statistics and Operations Research
Universidad Rey Juan Carlos



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