
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 alguem poderia me dar uma ajudinha? 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. em baixo eu dou um exemplo de matriz e a função que num funciona direito para quando so 1 hospedeiro morre. #vamos supor uma matrix onde 1 indica que aquele parasita(linha) vive #dentro do hospedeiro tal(coluna) #são 6 parasitos e 6 hospedeiros 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 #Separando os hospedeiros hospedeiros<-dimnames(dados)[[2]] hospedeiros #Sorteando uma ordem de extinção para os hospedeiros extinto<-sample(hospedeiros,ncol(dados),replace=F) extinto #função pra ver qts parasitas extinguem dados a morte dos hospedeiros extintos extcas<-function(dados,extintos) { interações<-dimnames(dados)[[1]][which(rowSums(dados[,extintos]>0)>0)] spextintas<-sum(rowSums(dados[interações,]>0)<=length(extintos)) return(spextintas) } #ela funciona mais ou menos #se todos os hospedeiros morrem, todos os parasitos morrem extcas(dados,extinto) #se morre 3 hospedeiros, os 3 primeiros morre nesse caso... extcas(dados,extinto[1:3]) #o mesmo acima pra 2 extcas(dados,extinto[1:2]) #Agora qd tento pra ver so pra 1 hospedeiro não funciona extcas(dados,extinto[1:1]) #o problema ta no rowSums #eu to usando esse comando pra ver qts vezes cada parasito interage com #os hospedeiros rowSums(dados[,extinto]>0) #a questão é até 2 ele funciona rowSums(dados[,extinto[1:2]]>0) #mas no 1 ele nao funciona rowSums(dados[,extinto[1:1]]>0) #pq ai nao fica uma matriz fica um vetor #então tem como eu faze o R entender isso dados[,extinto[1:1]]>0 #como uma matriz de 1 coluna e 6 linhas? Ai acho que o rowSums funcionaria #ou não sei se existe alguma solução mais interessante pra chegar no #mesmo resultado #mas tem que ser uma matrix que nao perca a informação do nome da coluna nem da linha pelo que entendo #minha meta final é fazer um grafico onde no eixo x é o numero de #especies extintas acumulado de hospedeiros e no Y qts parasitas #extinguiram juntos #então se essa função funcionar eu faço um loop pra cada número de #hospedeiros mortos, qts parasitas morrem juntos. #vetor pra receber o resultado resultado<-rep(NA,6) resultado #loop for(i in 2:6) { resultado[i]<-extcas(dados,extinto[1:i]) } resultado #grafico plot(resultado~c(1:6),type="b",xlab="Número de hospedeiros extintos", ylab="Número de parasitos extintos") #eu quero chegar nesse grafico, que fica faltando o resultado pro primeiro #hospedeiro morto. -- Grato Augusto C. A. Ribas Site Pessoal: http://augustoribas.heliohost.org Lattes: http://lattes.cnpq.br/7355685961127056