[R-br] Res: Implementação em C
eder em leg.ufpr.br
eder em leg.ufpr.br
Segunda Março 21 08:37:06 BRT 2011
OBS: não funciona em windows, em linux funciona
> Fernando,
>
> Uma das opções e mesmo tentar melhorar a função, outra e fazer ela ser
> executada em paralelo, com o uso do pacote 'multicore' que tem a função
> mclapply que já usei, nela vc pode definir o número de cores a ser
> utilizado, com o for que vc esta usando, mesmo que vc tem um pc como
> processador i7 por exemplo que tem 8 nucleos de processamento, seu
> processo é rodado em apenas 1 deixando os outros 7 na folga.
> a implementação do mclapply é muito semelhante com o lapply so muda uns
> argumentos para definir o numero de cores.
> OBS: multicore não funciona em linux
> Éder
>
>> 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
>>
>
>
> _______________________________________________
> 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