[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