[R-br] Res: Implementação em C
Benilton Carvalho
beniltoncarvalho em gmail.com
Segunda Março 21 08:33:26 BRT 2011
faltou a definicao da funcao cruz()....
2011/3/21 Fernando Henrique Toledo <fernandohtoledo em 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 em 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 em gmail.com>
>> Para: r-br em 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 em 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 em 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 em listas.c3sl.ufpr.br
>>>> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
>>>>
>>>
>>>
>>> _______________________________________________
>>> R-br mailing list
>>> R-br em listas.c3sl.ufpr.br
>>> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
>>>
>>
>>
>>
>> _______________________________________________
>> R-br mailing list
>> R-br em listas.c3sl.ufpr.br
>> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
>>
>
>
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
>
>
Mais detalhes sobre a lista de discussão R-br