Fábio, bom dia.<br><br>Para melhor localiza-lo, estou realizando um estudo de genética e melhoramento via simulação computacional. Portanto fui contruindo funções que mimetizam a situação que quero representar e em uma dessas função a necessidade de realizar cruzamentos entre vários indivíduos (também simulados).<br>
<br>Para isso construí a função abaixo em que se constroem uma matriz com as combinações de cruzamentos a serem realizados, através de um for() a função corre por essa matriz e procura o respectivo indivíduo em um data.frame que foi o resultado de outra função anterior.<br>
<br>Nas outras função quando possivel (no meu entendimento) utilizei apply() para otimizar o tempo, mas nesse caso específico não consegur visualizar como.<br><br>Nas condições que pretendo usar essa função, haverá a realização de cerca de 45 cruzamentos e no programa "main" da simulação isso irá ser empregado cerca de 600000 vezes! Por isso a minha preocupação, pois a implementação do jeito que está pela função system.time() dura em torno de 45 segundos, o que acho um pouco impeditivo. Veja a implementação específica dessa função, note que nela a emprego de outras função que eu criei que não vem ao caso.<br>
<br>att,<br>Fernando H<br><br># _____________________________________________________________________<br>#<br>#_ Função para fazer um dialelo<br>#_ Parâmetros:  pais = indivíduos selecionados na população anterior<br>#          população = população dos pais<br>
#              prole = tamanho das progênies<br>#                 h2 = herdabilidade do caráter<br>#                gmd = grau médio de dominância<br>#______________________________________________________________________<br>
dialelo <- function(pais, populacao, prole, h2, gmd) { # argumentos da função<br>  combinacoes <- combinations(length(pais), 2, v = pais) # cria todas as combinações híbridas<br>  progenies <- vector('list', length = nrow(combinacoes)) # cria a estrutura das progênies<br>
  id <- cbind(rep(c(1:nrow(combinacoes)), each = prole),<br>              rep(combinacoes[,1], each = prole),<br>              rep(combinacoes[,2], each = prole)) # cria a estrutura de identificação das progênies<br>  g <- ncol(populacao) - 5 # verifica o número de genes envolvidos<br>
  for(i in 1:nrow(combinacoes)) { # 'laço' -  para executar todos cruzamentos<br>    cruz.i <- cruz(populacao[combinacoes[i,1],4:(3 + g)],<br>                   populacao[combinacoes[i,2],4:(3 + g)],prole) # aplica a função 'cruz'<br>
    progenies[[i]] <- cruz.i # armazena a prole de cada cruzamento<br>  }<br>  dialelo <- as.data.frame(do.call(rbind, progenies)) # monta a planilha com o dialelo<br>  vg <- apply(dialelo, 1, <a href="http://soma.vg">soma.vg</a>, gmd = gmd) # calcula os valores genotípicos totais por indivíduo<br>
  varg <- var(vg) # calcula a variância genética<br>  fen <- vg + rnorm(nrow(dialelo), mean = 0, sqrt(varg * (1 - h2) / h2)) # atribui o desvio fenotípico<br>  resp <- cbind(id, dialelo, vg, fen) # monta a planilha com os resultados do dialelo<br>
  names(resp) <- c('fami', 'pai', 'mae', 1:g, 'vg', 'fen') # atribui os nomes as colunas da planilha<br>  return(resp) # retorna o dialelo<br>}<br><br><div class="gmail_quote">2011/3/21 Fabio Mathias Corrêa <span dir="ltr"><<a href="mailto:fabio.ufla@yahoo.com.br">fabio.ufla@yahoo.com.br</a>></span><br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div><div style="font-family: times new roman,new york,times,serif; font-size: 12pt;">Se vc falar melhor sobre o que vc está querendo implementar e postar o código, muita coisa pode ser otimizada no próprio R sem o uso de funções em C ou fortran!.<br>
<br>Valeu!!!<br><div> </div>            Fábio Mathias Corrêa<br>        Departamento de Estatística<br>   Universidade Estadual de Santa Cruz<br><br><br><br><div>Tel.: 73-3680-5076<br><br><div><br></div><div style="font-family: times new roman,new york,times,serif; font-size: 12pt;">
<br><div style="font-family: times new roman,new york,times,serif; font-size: 12pt;"><font face="Tahoma" size="2"><hr size="1"><b><span style="font-weight: bold;">De:</span></b> Fernando Henrique Toledo <<a href="mailto:fernandohtoledo@gmail.com" target="_blank">fernandohtoledo@gmail.com</a>><br>
<b><span style="font-weight: bold;">Para:</span></b> <a href="mailto:r-br@listas.c3sl.ufpr.br" target="_blank">r-br@listas.c3sl.ufpr.br</a><br><b><span style="font-weight: bold;">Enviadas:</span></b> Domingo, 20 de Março de 2011 21:30:55<br>
<b><span style="font-weight: bold;">Assunto:</span></b> Re: [R-br] Implementação em C<br></font><div><div></div><div class="h5"><br>Pedro,<br><br>Obrigado pela dica, o material vai dar alguma noção sobre a coisa toda.<br>
<br>att,<br>Fernando H<br><br><div class="gmail_quote">2011/3/20 Pedro Henrique <span dir="ltr"><<a rel="nofollow" href="mailto:pedro.sobralxv@gmail.com" target="_blank">pedro.sobralxv@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Acredito que o seguinte site resolverá o teu problema:<br><a rel="nofollow" href="http://leg.ufpr.br/doku.php/seminarios:minicursorc" target="_blank">http://leg.ufpr.br/doku.php/seminarios:minicursorc</a><br>

<br><b style="font-family: times new roman,serif;">Pedro Henrique Araújo Sobral</b><br style="font-family: times new roman,serif;">
<i style="font-family: times new roman,serif;">Estudante Eng. de Computação</i><br style="font-family: times new roman,serif;"><br><div class="gmail_quote">Em 20 de março de 2011 19:11, Fernando Henrique Toledo <span dir="ltr"><<a rel="nofollow" href="mailto:fernandohtoledo@gmail.com" target="_blank">fernandohtoledo@gmail.com</a>></span> escreveu:<br>


<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div><div></div><div>
Lista, boa noite.<br><br>Gostaria de pedir a quem possa algumas dicas e tutoriais que me posibilitem um maior entendimento do processo de implementação de funções em C e uso dessas mesmas no ambiente R! Na verdade não programo em C, mas estou enfrentando certos problemas com algumas funções que crio no R, pois o tempo de processamento delasestá um pouco impeditivo. Li alguns tutoriais do R e do GCC, mas ainda não tenho conhecimento suficiente para enveredar por esse lado. Assim gostaria de saber da experiencia de vocês quanto a isso.<br>




<br>fico no aguardo, att,<br>Fernando H <br>
<br></div></div>_______________________________________________<br>
R-br mailing list<br>
<a rel="nofollow" href="mailto:R-br@listas.c3sl.ufpr.br" target="_blank">R-br@listas.c3sl.ufpr.br</a><br>
<a rel="nofollow" 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>
<br></blockquote></div><br>
<br>_______________________________________________<br>
R-br mailing list<br>
<a rel="nofollow" href="mailto:R-br@listas.c3sl.ufpr.br" target="_blank">R-br@listas.c3sl.ufpr.br</a><br>
<a rel="nofollow" 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>
<br></blockquote></div><br>
</div></div></div></div></div>
</div><br>



       </div><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>
<br></blockquote></div><br>