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]]