
faltou a definicao da funcao cruz().... 2011/3/21 Fernando Henrique Toledo <fernandohtoledo@gmail.com>:
Fábio, bom dia.
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).
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.
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.
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.
att, Fernando H
# _____________________________________________________________________ # #_ Função para fazer um dialelo #_ Parâmetros: pais = indivíduos selecionados na população anterior # população = população dos pais # prole = tamanho das progênies # h2 = herdabilidade do caráter # gmd = grau médio de dominância #______________________________________________________________________ dialelo <- function(pais, populacao, prole, h2, gmd) { # argumentos da função combinacoes <- combinations(length(pais), 2, v = pais) # cria todas as combinações híbridas progenies <- vector('list', length = nrow(combinacoes)) # cria a estrutura das progênies id <- cbind(rep(c(1:nrow(combinacoes)), each = prole), rep(combinacoes[,1], each = prole), rep(combinacoes[,2], each = prole)) # cria a estrutura de identificação das progênies g <- ncol(populacao) - 5 # verifica o número de genes envolvidos for(i in 1:nrow(combinacoes)) { # 'laço' - para executar todos cruzamentos cruz.i <- cruz(populacao[combinacoes[i,1],4:(3 + g)], populacao[combinacoes[i,2],4:(3 + g)],prole) # aplica a função 'cruz' progenies[[i]] <- cruz.i # armazena a prole de cada cruzamento } dialelo <- as.data.frame(do.call(rbind, progenies)) # monta a planilha com o dialelo vg <- apply(dialelo, 1, soma.vg, gmd = gmd) # calcula os valores genotípicos totais por indivíduo varg <- var(vg) # calcula a variância genética fen <- vg + rnorm(nrow(dialelo), mean = 0, sqrt(varg * (1 - h2) / h2)) # atribui o desvio fenotípico resp <- cbind(id, dialelo, vg, fen) # monta a planilha com os resultados do dialelo names(resp) <- c('fami', 'pai', 'mae', 1:g, 'vg', 'fen') # atribui os nomes as colunas da planilha return(resp) # retorna o dialelo }
2011/3/21 Fabio Mathias Corrêa <fabio.ufla@yahoo.com.br>
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!.
Valeu!!!
Fábio Mathias Corrêa Departamento de Estatística Universidade Estadual de Santa Cruz
Tel.: 73-3680-5076
________________________________ De: Fernando Henrique Toledo <fernandohtoledo@gmail.com> Para: r-br@listas.c3sl.ufpr.br Enviadas: Domingo, 20 de Março de 2011 21:30:55 Assunto: Re: [R-br] Implementação em C
Pedro,
Obrigado pela dica, o material vai dar alguma noção sobre a coisa toda.
att, Fernando H
2011/3/20 Pedro Henrique <pedro.sobralxv@gmail.com>
Acredito que o seguinte site resolverá o teu problema: http://leg.ufpr.br/doku.php/seminarios:minicursorc
Pedro Henrique Araújo Sobral Estudante Eng. de Computação
Em 20 de março de 2011 19:11, Fernando Henrique Toledo <fernandohtoledo@gmail.com> escreveu:
Lista, boa noite.
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.
fico no aguardo, att, Fernando H
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br