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

Augusto Ribas ribas.aca em gmail.com
Quinta Junho 14 21:36:08 BRT 2012


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


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