Uia, funcionou perfeitamente, muito obrigado.<br><br><div class="gmail_quote">Em 14 de abril de 2012 17:56, Henrique Dallazuanna <span dir="ltr"><<a href="mailto:wwwhsd@gmail.com">wwwhsd@gmail.com</a>></span> escreveu:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Adicione drop = FALSE:<br>
<br>
dados[,extintos, drop = FALSE]<br>
<br>
2012/4/14 Augusto Ribas <<a href="mailto:ribas.aca@gmail.com">ribas.aca@gmail.com</a>>:<br>
<div><div class="h5">> Ola pessoal, estou com problemas pra deixar uma função generica o<br>
> suficiente, acho que provavelmente a solução deve ser bem simples, mas não<br>
> estou conseguindo solucionar<br>
> alguem poderia me dar uma ajudinha?<br>
> Minha intenção a partir de uma matriz de network entre hospedeiros e<br>
> parasitos conseguir calcular quantos parasitos morrem ao um ou mais<br>
> hospedeiros serem extintos.<br>
> em baixo eu dou um exemplo de matriz e a função que num funciona direito<br>
> para quando so 1 hospedeiro morre.<br>
><br>
> #vamos supor uma matrix onde 1 indica que aquele parasita(linha) vive<br>
> #dentro do hospedeiro tal(coluna)<br>
> #são 6 parasitos e 6 hospedeiros<br>
><br>
> dados<-matrix(c(1,1,1,0,0,0,<br>
>                 0,0,1,0,0,0,<br>
>                 0,0,1,0,0,0,<br>
>                 0,0,0,1,0,0,<br>
>                 0,0,0,1,1,0,<br>
>                 0,0,0,0,0,1),byrow=T,ncol=6,nrow=6,<br>
>                 dimnames=list(paste("P",1:6,sep=""),paste("H",1:6,sep="")))<br>
> dados<br>
><br>
> #Separando os hospedeiros<br>
> hospedeiros<-dimnames(dados)[[2]]<br>
> hospedeiros<br>
><br>
> #Sorteando uma ordem de extinção para os  hospedeiros<br>
> extinto<-sample(hospedeiros,ncol(dados),replace=F)<br>
> extinto<br>
><br>
> #função pra ver qts parasitas extinguem dados a morte dos hospedeiros<br>
> extintos<br>
> extcas<-function(dados,extintos) {<br>
>   interações<-dimnames(dados)[[1]][which(rowSums(dados[,extintos]>0)>0)]<br>
>   spextintas<-sum(rowSums(dados[interações,]>0)<=length(extintos))<br>
>   return(spextintas)<br>
>   }<br>
><br>
> #ela funciona mais ou menos<br>
> #se todos os hospedeiros morrem, todos os parasitos morrem<br>
> extcas(dados,extinto)<br>
> #se morre 3 hospedeiros, os 3 primeiros morre nesse caso...<br>
> extcas(dados,extinto[1:3])<br>
> #o mesmo acima pra 2<br>
> extcas(dados,extinto[1:2])<br>
><br>
> #Agora qd tento pra ver so pra 1 hospedeiro não funciona<br>
> extcas(dados,extinto[1:1])<br>
><br>
> #o problema ta no rowSums<br>
> #eu to usando esse comando pra ver qts vezes cada parasito interage com<br>
> #os hospedeiros<br>
> rowSums(dados[,extinto]>0)<br>
> #a questão é até 2 ele funciona<br>
> rowSums(dados[,extinto[1:2]]>0)<br>
><br>
> #mas no 1 ele nao funciona<br>
> rowSums(dados[,extinto[1:1]]>0)<br>
><br>
> #pq ai nao fica uma matriz fica um vetor<br>
> #então tem como eu faze o R entender isso<br>
> dados[,extinto[1:1]]>0<br>
> #como uma matriz de 1 coluna e 6 linhas? Ai acho que o rowSums funcionaria<br>
> #ou não sei se existe alguma solução mais interessante pra chegar no<br>
> #mesmo resultado<br>
> #mas tem que ser uma matrix que nao perca a informação do nome da coluna nem<br>
> da linha pelo que entendo<br>
><br>
> #minha meta final é fazer um grafico onde no eixo x é o numero de<br>
> #especies extintas acumulado de hospedeiros e no Y qts parasitas<br>
> #extinguiram juntos<br>
> #então se essa função funcionar eu faço um loop pra cada número de<br>
> #hospedeiros mortos, qts parasitas morrem juntos.<br>
><br>
> #vetor pra receber o resultado<br>
> resultado<-rep(NA,6)<br>
> resultado<br>
> #loop<br>
> for(i in 2:6) {<br>
>   resultado[i]<-extcas(dados,extinto[1:i])<br>
>  }<br>
> resultado<br>
> #grafico<br>
> plot(resultado~c(1:6),type="b",xlab="Número de hospedeiros extintos",<br>
>   ylab="Número de parasitos extintos")<br>
><br>
> #eu quero chegar nesse grafico, que fica faltando o resultado pro primeiro<br>
> #hospedeiro morto.<br>
><br>
> --<br>
> Grato<br>
> Augusto C. A. Ribas<br>
><br>
> Site Pessoal: <a href="http://augustoribas.heliohost.org" target="_blank">http://augustoribas.heliohost.org</a><br>
> Lattes: <a href="http://lattes.cnpq.br/7355685961127056" target="_blank">http://lattes.cnpq.br/7355685961127056</a><br>
><br>
><br>
</div></div>> _______________________________________________<br>
> R-br mailing list<br>
> <a href="mailto:R-br@listas.c3sl.ufpr.br">R-br@listas.c3sl.ufpr.br</a><br>
> <a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br" target="_blank">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>
> Leia o guia de postagem (<a href="http://www.leg.ufpr.br/r-br-guia" target="_blank">http://www.leg.ufpr.br/r-br-guia</a>) e forneça código<br>
> mínimo reproduzível.<br>
<span class="HOEnZb"><font color="#888888"><br>
<br>
<br>
--<br>
Henrique Dallazuanna<br>
Curitiba-Paraná-Brasil<br>
25° 25' 40" S 49° 16' 22" O<br>
_______________________________________________<br>
R-br mailing list<br>
<a href="mailto:R-br@listas.c3sl.ufpr.br">R-br@listas.c3sl.ufpr.br</a><br>
<a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br" target="_blank">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>
Leia o guia de postagem (<a href="http://www.leg.ufpr.br/r-br-guia" target="_blank">http://www.leg.ufpr.br/r-br-guia</a>) e forneça código mínimo reproduzível.<br>
</font></span></blockquote></div><br><br clear="all"><br>-- <br><div>Grato<br>Augusto C. A. Ribas</div>
<div> </div>
<div>Site Pessoal: <a href="http://augustoribas.heliohost.org" target="_blank">http://augustoribas.heliohost.org</a></div>
<div>Lattes: <a href="http://lattes.cnpq.br/7355685961127056" target="_blank">http://lattes.cnpq.br/7355685961127056</a><br></div><br>