[R-br] Problema pra criar Função - duvidas com rowSums

Augusto Ribas ribas.aca em gmail.com
Sábado Abril 14 19:03:30 BRT 2012


Uia, funcionou perfeitamente, muito obrigado.

Em 14 de abril de 2012 17:56, Henrique Dallazuanna <wwwhsd em gmail.com>escreveu:

> Adicione drop = FALSE:
>
> dados[,extintos, drop = FALSE]
>
> 2012/4/14 Augusto Ribas <ribas.aca em gmail.com>:
> > 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
> >
> >
> > _______________________________________________
> > R-br mailing list
> > R-br em 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.
>
>
>
> --
> Henrique Dallazuanna
> Curitiba-Paraná-Brasil
> 25° 25' 40" S 49° 16' 22" O
> _______________________________________________
> R-br mailing list
> R-br em 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.
>



-- 
Grato
Augusto C. A. Ribas

Site Pessoal: http://augustoribas.heliohost.org
Lattes: http://lattes.cnpq.br/7355685961127056
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20120414/7cc5e65e/attachment.html>


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