[R-br] Ajuda com uso de list(). Como fazer uma lista de listas?

Benilton Carvalho beniltoncarvalho em gmail.com
Sexta Junho 15 06:43:32 BRT 2012


Eu nao entendi muito bem sua primeira pergunta:

#Mas aqui eu não sei o que fazer, extiste alguma forma de eu fazer um
objeto que seja uma lista de listas, pra guardar esses resultados.

Mas sera' q o q vc quer e' algo como:

for (i in 1:ncol(dados)){
    algumaMatriz <- matrix(rnorm(20), nc=4)
    algumOutroResultado <- ext.list(dados, extinto[1:i])
   lista.extintos[[i]] <- list(matriz=algumaMatriz,
resultado=algumOutroResultado)
}

#Outra duvida sobre listas é no caso da lista acima, vamos supor que
eu gostaria de saber em qual numero (o [[n]]) o "P2" esta a primeira
vez, tem como fazer?

lista.extintos = list(character(0), "P4", c("P4", "P6"), c("P4", "P6"), c("P4",
"P5", "P6"), c("P1", "P2", "P3", "P4", "P5", "P6"))
which(mapply('%in%', 'P2', lista.extintos)) ## onde tem P2
which(mapply('%in%', 'P2', lista.extintos))]1] ## onde eh o primeiro P2

#E se der pra fazer uma lista de listas, como faz?
Assumindo q a lista de lista seja nomeada como fiz na primeira resposta:
which(mapply('%in%', 'P2', lapply(lista.extintos, '[[', 'resultado')))

b


2012/6/15 Augusto Ribas <ribas.aca em gmail.com>:
> Ola pessoal. Estou aqui sofrendo para usar listas no R, resumidamente
> eu estou com dificuldades em criar uma lista de listas.
>
> Segue aqui um CMR, espero não esteja muito longo.
>
> #Eu tenho uma matriz que é o rede de interação entre algumas especies
> de hospedeiros e parasitas, por exemplo:
> dados<-matrix(c(1,1,1,0,0,0,
>                0,0,1,0,0,0,
>                0,0,1,0,0,0,
>                0,0,0,1,0,0,
>                0,0,0,1,1,0,
>                0,0,0,0,0,1),byrow=T,ncol=6,nrow=6,
>                dimnames=list(paste("P",1:6,sep=""),paste("H",1:6,sep="")))
> dados
>
> #E estava querendo ver qual o efeito das extinções dos hospedeiros nos
> parasitas, então eu crio uma sequencia de extinção de hospedeiros
>
> set.seed(13)
> extinto<-sample(colnames(dados),ncol(dados),replace=F)
> extinto
>
> # vejo de acordo com essas extinções, qts parasitas vão morrendo por
> falta de hospedeiro, então fiz uma função pra contar  isso
>
> ext.cont<-function(dados,extintos) {
>  spextintas<-sum(rowSums(dados[,!dimnames(dados)[[2]]%in%extintos,drop=F])<1)
>  return(spextintas)
>  }
>
> #ai salvo o resultado num vetor
> resultado<-rep(NA,ncol(dados))
> resultado
>
> #loop faço um loop pra ver a sequencia, tipo somente a primeira
> especie, a primeira e a segunda, as tres primeiras até todas as
> especies.
> for(i in 1:ncol(dados)) {
>  resultado[i]<-ext.cont(dados,extinto[1:i])
>  }
> resultado
>
> #mas ai eu posso fazer isso varias vezes pra ver como é de forma geral
> final<-cbind(resultado)
> for (j in 1:4) {
>    extinto<-sample(colnames(dados),ncol(dados),replace=F)
>  for(i in 1:1:ncol(dados)) {
>        resultado[i]<-ext.cont(dados,extinto[1:i])
>    }
>  final<-cbind(final,resultado)
>  }
>
> final
> matplot(1:6,final,type="b",pch=1,lty=1)
>
> #so que eu gostaria de saber quem esta extinguindo também, então fiz uma função
>
> ext.list<-function(dados,extintos) {
>  lista.extintos<-rownames(dados)[which(rowSums(dados[,!dimnames(dados)[[2]]%in%extintos,drop=F])<1)]
>  return(lista.extintos)
>  }
>
> # e como pode tanto não extinguir ninguem como mais de uma expecie
> imagino que seja interessante usar uma lista
> lista.extintos<-list(NA)
>
> #loop
> for(i in 1:ncol(dados)) {
>  lista.extintos[[i]]<-ext.list(dados,extinto[1:i])
>  }
>
> lista.extintos
>
> #so que ai so para a contagem, eu conseguia salva varios resultados na
> forma de uma matriz.
> #Mas aqui eu não sei o que fazer, extiste alguma forma de eu fazer um
> objeto que seja uma lista de listas, pra guardar esses resultados.
> #Outra duvida sobre listas é no caso da lista acima, vamos supor que
> eu gostaria de saber em qual numero (o [[n]]) o "P2" esta a primeira
> vez, tem como fazer?
> #Por exemplo se fosse um vetor eu usaria o teste == , agora sendo uma
> lista como eu faço pra saber em quais elementos ([[n]]) ele esta, ou a
> primeira vez que aparece.
> #E se der pra fazer uma lista de listas, como faz?
> #Espero não ter sido confuso na terminologia.
>
> Muito obrigado e boa a noite a todos :)
>
>
> --
> Grato
> Augusto C. A. Ribas
>
> Site Pessoal: http://augustoribas.heliohost.org
> Lattes: http://lattes.cnpq.br/7355685961127056
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.


Mais detalhes sobre a lista de discussão R-br