Ajuda com uso de list(). Como fazer uma lista de listas?

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

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@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@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.

Obrigado Benilton. Eu consegui chegar onde queria. Eu queria isso: #função pra ver qual parasitas esta extinguindo dados a morte dos hospedeiros extintos ext.list<-function(dados,extintos) { lista.extintos<-rownames(dados)[which(rowSums(dados[,!dimnames(dados)[[2]]%in%extintos,drop=F])<1)] return(lista.extintos) } ################################################################## #exemplo ################################################################## dados<-matrix(c(1,1,0,0,0,0, 0,1,1,0,0,0, 0,0,1,1,0,0, 0,0,0,1,1,0, 0,0,0,0,1,1, 1,0,0,0,0,1),byrow=T,ncol=6,nrow=6, dimnames=list(paste("P",1:6,sep=""),paste("H",1:6,sep=""))) dados #quem vai extinguir extinto<-sample(colnames(dados),ncol(dados),replace=F) extinto lista.extintos<-list(NA) #Primeiro caso #loop for(i in 1:ncol(dados)) { lista.extintos[[i]]<-ext.list(dados,extinto[1:i]) } lista.extintos #Criando uma lista pra receber outras simulações lista.final<-list(lista.extintos) lista.final #fazendo mais 9 pra interar 10 for (j in 2:10) { extinto<-sample(colnames(dados),ncol(dados),replace=F) for(i in 1:ncol(dados)) { lista.extintos[[i]]<-ext.list(dados,extinto[1:i]) } lista.final[[j]]<-lista.extintos } #agora fico com 10 listas e cada lista tem 6 itens, eu não estava conseguindo usar o listas pra poder ficar separada as listas #treinando com seu exemplo eu consegui visualizar como fazer lista.final hist.final<-matrix(NA,ncol=10,nrow=6,dimnames=list(paste("P",1:6,sep=""),paste("Simulação",1:10,sep=" "))) #ai uma utilidade é a outra pergunta, ver qd a sp estinguiu hist.final for(j in rownames(hist.final)) { for(i in 1:10) { hist.final[j,i]<-which(mapply("%in%",j, lista.final[[i]]))[1] } } #a principio essa era a resposta que eu queria hist.final Agora tenho que trocar esses loops por applys. Mas muito obrigado pela ajuda :) Assim ja da pra brincar como mudanças na matriz e nas probabilidades de extinção afetam quando os parasitas estão sendo extintos :) -- Grato Augusto C. A. Ribas Site Pessoal: http://augustoribas.heliohost.org Lattes: http://lattes.cnpq.br/7355685961127056
participantes (2)
-
Augusto Ribas
-
Benilton Carvalho