Ola pessoal, estou com problemas pra deixar uma função generica o suficiente, acho que provavelmente a solução deve ser bem simples, mas não estou conseguindo solucionar<br>alguem poderia me dar uma ajudinha?<br>Minha intenção a partir de uma matriz de network entre hospedeiros e parasitos conseguir calcular quantos parasitos morrem ao um ou mais hospedeiros serem extintos.<br>
em baixo eu dou um exemplo de matriz e a função que num funciona direito 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 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 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 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>