
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.

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@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@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.

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@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@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@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@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.

Olá, a inserção de valor padrão numa função é bastante simples: basta que você coloque o valor que quer definir como padrão na declaração da função. Por exemplo (direto no console do R, por isso a marcação com > e +): > f <- function(x, y=10) { + x+y + } > f(10) [1] 20 > f(1) [1] 11 > f(10, 5) [1] 15 > Outro detalhe que me lembrei é que você não necessariamente precisa fazer a sua passagem de distribuição por string, pois R aceita que se passe uma função como parâmetro. Por exemplo (usando dpois como distribuição padrão): > g <- function(y, a, dist=dpois) { + dist(y,a) + } > g(1, 10) [1] 0.0004539993 > g(1, 10, dnorm) [1] 1.027977e-18 > Espero ter auxiliado. -- João Felipe Santos 2011/9/6 . . <xkziloj@gmail.com>: > 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@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@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@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@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. >> >
participantes (2)
-
. .
-
João Felipe Santos