[R-br] [Dúvida] Função dentro de função.

Elias Teixeira Krainski eliaskrainski em yahoo.com.br
Terça Julho 2 14:26:55 BRT 2013


Uma utilidade disso é não ser necessário a passagem de variáveis.
Exemplo: preciso verificar uma taxa efetiva de juros, a partir do
capital emprestado, da prestação e do número de parcelas.
Assumindo que a primeira parcela será paga exatamente
um mês após temos:

jfun <- function(cap, prest, npar) {
     obj <- function(tx) {
         for (i in 1:npar)
             cap <- cap*(1+tx) - prest
     cap^2
     }
     optimize(obj, c(0, prest*npar/cap-1))$min
}

### exemplo: emprestimo de 1000 pagos em 12 x 100
jfun(1000, 100, 12)

Neste caso, não passo 'cap', 'prest' e 'npar' para a função 'obj'.
Também, 'cap' é alterado apenas no ambiente da função 'obj',
que é chamada diversas vezes pela função optimize. Porém,
a cada chamada, o valor 'inicial' de 'cap' é o valor do ambiente
da função 'jfun'.

Att.
Elias.

On 02/07/13 11:51, Benilton Carvalho wrote:
> e' questao de gosto... e gosto nao se discute.
>
> eu, particularmente, prefiro nao faze-lo por nao gostar de depender do
> escopo lexical... mas ha' quem goste exatamente por isso...
>
> b
>
> Em 2 de julho de 2013 11:47, Pedro Rafael
> <pedro.rafael.marinho em gmail.com> escreveu:
>> Não tenho nenhum exemplo para dar. Minha dúvida é teórica. Gostaria de saber
>> se é uma boa ou má prática de programação definir função dentro de função em
>> R. Suponhamos que tenho duas funções f1 e f2. Para f2 rodar ela precisa de
>> f1. Não preciso de f1 no Environment Global. f1 é apenas uma função
>> necessária para f2. O "correto" é definir f1 fora ou dentro da função f2?
>> [   ],
>> Pedro Rafael Diniz Marinho.
>>
>> _______________________________________________
>> 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.
> _______________________________________________
> 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.



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