[R-br] Generalizando chamada de função

. . xkziloj em gmail.com
Terça Setembro 6 13:06:45 BRT 2011


Muito obrigado J F Santos. Não fiz exatamente como o seu código mas
acho que a ideia é a mesma, certo? ("func41")

Agora tenho outra dúvida, é com relação ao parâmetro "rate" da função
"dexp" (chamada pela "RegDist"), esse parâmetro já tem um valor
padrão. Tentei incluir essa funcionalidade no meu código - "func42",
mas não compreendi por completo como utilizar "..." neste caso.

Poderia me ajudar, por favor.

func41 <- function(y, a, sad, rate) {
	Compound <- function(n, y, a, sad, samp, rate) {
		RegDist <- function(n, sad, rate) {
			dcom <- paste("d", sad, sep="")
      		        dots <- list(n, rate)
			do.call(dcom, dots)
		}
		RegDist(n, sad, rate) * dpois(y, a * n)
	}
	integrate(Compound, 0, Inf, y, a, sad, samp, rate)$value
}

func41(1, 0.05, "exp", rate=0.001)

func42 <- function(y, a, sad, ...) {
	dots <- list(...)
	Compound <- function(n, y, a, sad, dots) {
		RegDist <- function(n, sad, dots) {
			dcom <- paste("d", sad, sep="")
      		        dots <- list(n, dots)
			do.call(dcom, dots)
		}
		RegDist(n, sad, dots) * dpois(y, a * n)
	}
	integrate(Compound, 0, Inf, y, a, sad, dots)$value
}

func42(1, 0.05, "exp", rate=0.001)


2011/9/6 João Felipe Santos <joao.eel em gmail.com>:
> Olá,
>
> o erro ocorre ao fazer a composição as.list(c(y, lambda)). Você gera
> uma única lista contendo como valores o conteúdo do vetor composto por
> y E lambda. Substitua a func2 pela seguinte:
>
> func2 <- function(y, a, rate, samp) {
>       f1 <- function(n, y, a, rate, samp) {
>
>               SampDist <- function(y, a, n, samp) {
>                       lambda <- a * n
>                       dcom <- paste("d", samp, sep="")
>                       do.call(dcom, list(x=y, lambda=lambda))
>               }
>
>               dexp(n, rate) * SampDist(y, a, n, samp)
>       }
>       integrate(f1, 0, Inf, y, a, rate, samp)
> }
>
> Vai funcionar como você espera.
>
> []s
>
> --
> João Felipe Santos
>
> 2011/9/6 . . <xkziloj em gmail.com>:
>> Olá pessoal,
>>
>> Gostaria da ajuda de vcs para entender o que acontece no código da
>> "func2". Meu plano é fazer com que func2 e func1 retornem os mesmos
>> valores. Para "func1" obtenho...
>>
>> 0.25 with absolute error < 8.4e-05
>>
>> Mas "func2" está retornando...
>>
>> Error in dpois(1, 0.1, 23.3065168689948, 0.000429064542600244,
>> 3.82988398013855,  :
>>  unused argument(s) (0.000429064542600244, 3.82988398013855,
>> 0.00261104515224461, 1.37999516465199, 0.0072464022020844,
>> 0.673787740945863, 0.0148414691931943, 0.383193602946711,
>> 0.0260964690514175, 0.236612585866545, 0.0422631787036055,
>> 0.152456705113438, 0.0655923922306948)
>>
>>
>> func1 <- function(y, a, rate) {
>>        f1 <- function(n, y, a, rate) {
>>                lambda <- a * n
>>                dexp(n, rate) * dpois(y, lambda)
>>        }
>>        integrate(f1, 0, Inf, y, a, rate)
>> }
>>
>> func1(1, 0.1, 0.1)
>>
>>
>> func2 <- function(y, a, rate, samp) {
>>        f1 <- function(n, y, a, rate, samp) {
>>
>>                SampDist <- function(y, a, n, samp) {
>>                        lambda <- a * n
>>                        dcom <- paste("d", samp, sep="")
>>                        dots <- as.list(c(y, lambda))
>>                        do.call(dcom, dots)
>>                }
>>
>>                dexp(n, rate) * SampDist(y, a, n, samp)
>>        }
>>        integrate(f1, 0, Inf, y, a, rate, samp)
>> }
>>
>> func2(1, 0.1, 0.1, "pois")
>>
>>
>>
>> Desde já obrigado.
>> _______________________________________________
>> 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