<div dir="ltr">A minha solução bem mais inocente que as explicações do Fernando e as outras soluções foi simplesmente<br><br>my.quasi <- function (link = "identity", variance = "constant") <br>{<br>    link <- link<br>
    variance <- variance ## Coloquei estas duas linhas rsr pronto funcionou o resta da função é igual<br>    linktemp <- substitute(link)<br>    if (!is.character(linktemp)) <br>        linktemp <- deparse(linktemp)<br>
    if (linktemp %in% c("logit", "probit", "cloglog", "identity", <br>        "inverse", "log", "1/mu^2", "sqrt")) ....<br></div><div class="gmail_extra">
<br><br><div class="gmail_quote">Em 18 de abril de 2014 16:31, Éder Comunello <span dir="ltr"><<a href="mailto:comunello.eder@gmail.com" target="_blank">comunello.eder@gmail.com</a>></span> escreveu:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr"><div>Senhores, bom dia!</div><div><br></div><div>Não sei se ainda há interesse no tópico, mas tentei acompanhar as explicações dadas pelo Fernando Mayer e parece que a substituição do deparse() por eval() na condicional de vtemp parece funcionar... Mas também não sei afirmar se seia um erro...</div>

<div><br></div><div><div><font face="courier new, monospace">### função simplificada para teste...</font></div><div><font face="courier new, monospace">### <function></font></div><div><font face="courier new, monospace">teste <- function (variance = "constant") { </font></div>

<div><font face="courier new, monospace">          vtemp <- substitute(variance)</font></div><div><font face="courier new, monospace">#           if (!is.character(vtemp)) vtemp <- deparse(vtemp)</font></div><div><font face="courier new, monospace">          if (!is.character(vtemp)) vtemp <- eval(vtemp)</font></div>

<div><font face="courier new, monospace">          variance_nm <- vtemp</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace"> tmp <- switch(vtemp, constant = 1, `mu(1-mu)` = 2, mu = 3, `mu^2` = 4, `mu^3` = 5, variance_nm <- NA)</font></div>

<div><font face="courier new, monospace">    if (<a href="http://is.na" target="_blank">is.na</a>(variance_nm)) {</font></div><div><font face="courier new, monospace">        if (is.character(variance)) </font></div><div>
<font face="courier new, monospace">            stop(gettextf("'variance' \"%s\" is invalid: possible values are \"mu(1-mu)\", \"mu\", \"mu^2\", \"mu^3\" and \"constant\"",  variance_nm), domain = NA)}</font></div>

<div><font face="courier new, monospace"> </font></div><div><font face="courier new, monospace">print(c((str(variance)),(str(vtemp)),(tmp)))</font></div><div><font face="courier new, monospace">}</font></div><div><font face="courier new, monospace">### </function></font></div>

<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">teste()</font></div><div><font face="courier new, monospace">teste(variance=2)</font></div><div><font face="courier new, monospace">teste(variance='mu^2')</font></div>

<div><font face="courier new, monospace">teste(variance=variance)</font></div><div><font face="courier new, monospace">teste(variance=variance)</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">### </code></font></div>

</div><div><br></div></div><div class="gmail_extra"><br clear="all"><div><div dir="ltr">Éder Comunello <<a href="mailto:comunello.eder@gmail.com" target="_blank">c</a><a href="mailto:omunello.eder@gmail.com" target="_blank">omunello.eder@gmail.com</a>> <br>

Dourados, MS - [22 16.5'S, 54 49'W]<br></div></div>
<br><br><div class="gmail_quote">Em 15 de abril de 2014 13:17, Fernando Mayer <span dir="ltr"><<a href="mailto:fernandomayer@gmail.com" target="_blank">fernandomayer@gmail.com</a>></span> escreveu:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div dir="ltr"><div><div><div><div><div><div><div>Wagner,<br><br></div>se olhar dentro da função quasi, no início tem isso para o link<br><br>linktemp <- substitute(link)<br>    if (!is.character(linktemp)) <br>        linktemp <- deparse(linktemp)<br>


    if (linktemp %in% c("logit", "probit", "cloglog", "identity", <br>        "inverse", "log", "1/mu^2", "sqrt")) <br>        stats <- make.link(linktemp)<br>


    else if (is.character(link)) {<br>        stats <- make.link(link)<br>        linktemp <- link<br><br></div>Ou seja, passando um caracter como<br><br></div>link <- "log"<br><br></div>vai fazer com que a função use<br>


<br></div>make.link(link)<br><br></div>e funciona como esperado. Já para a variance, a parte relevante eh essa<br><br>vtemp <- substitute(variance)<br>    if (!is.character(vtemp)) <br>        vtemp <- deparse(vtemp)<br>


    variance_nm <- vtemp<br>    switch(vtemp, constant = {<br>...<br><br></div>Portanto, se fizermos<br><div><br>variance <- "mu"<br><br></div><div>e seguir a lógica<br></div><div><br>(vtemp <- substitute(variance))<br>


variance<br>class(vtemp)<br>[1] "name"<br><br></div><div>vtemp ja não eh mais um character, portanto ele vai executar<br><br>vtemp <- deparse(vtemp)<br>vtemp<br>[1] "variance"<br><br>variance_nm <- vtemp<br>


variance_nm<br>[1] "variance"<br><br></div><div>Como dentro das opções do switch(...) ele não vai achar nenhuma opção, ele vai para a alternativa no final que é<br><br>    switch(vtemp, constant = {<br>...<br><br>


            }, variance_nm <- NA)<br><br></div><div>e variance_nm sendo NA vai cair nisso aqui<br><br>if (<a href="http://is.na" target="_blank">is.na</a>(variance_nm)) {<br>        if (is.character(variance)) <br>            stop(gettextf("'variance' \"%s\" is invalid: possible values are \"mu(1-mu)\", \"mu\", \"mu^2\", \"mu^3\" and \"constant\"", <br>


                variance_nm), domain = NA)<br><br></div><div>que é o erro. Agora, se isso faz sentido ou se é uma "falha" de programação na função já não sei dizer (acredito que isso seja intencional, mas o motivo não da pra saber). <br>


<br></div><div>De qualquer maneira vc pode modificar a função quasi() pra fazer do jeito que vc esperaria, começando por tirar o substitute() ali no começo...<br><br></div><div>Abraço,<br><div><div><div><div><div><br><br>


</div></div></div></div></div></div></div><div class="gmail_extra"><br clear="all"><div><div dir="ltr">---<br>Fernando de Pol Mayer<br>Laboratório de Estatística Ambiental - LEA<br>Instituto de Matemática, Estatística e Física - IMEF<br>


Universidade Federal do Rio Grande - FURG<br>URL: <a href="http://fernandomayer.github.io" target="_blank">http://fernandomayer.github.io</a><br>e-mail: fernando.mayer [@] {<a href="http://gmail.com" target="_blank">gmail.com</a>, <a href="http://furg.br" target="_blank">furg.br</a>}</div>


</div>
<br><br><div class="gmail_quote">2014-04-15 12:24 GMT-03:00 Wagner Bonat <span dir="ltr"><<a href="mailto:wbonat@gmail.com" target="_blank">wbonat@gmail.com</a>></span>:<div><div><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<div dir="ltr"><div><div>Ok ! Mas vocês não acharam estranho não precisar fazer a mesma coisa para o link ?<br></div>Vc teria alguma explicação para isso ?<br><br></div>Obrigado !!<br></div><div class="gmail_extra"><br><br>



<div class="gmail_quote">Em 15 de abril de 2014 14:20, Éder Comunello <span dir="ltr"><<a href="mailto:comunello.eder@gmail.com" target="_blank">comunello.eder@gmail.com</a>></span> escreveu:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<div><div>
<div dir="ltr"><div>Wagner, bom dia!</div><div><br></div><div>Supondo que o vetor de valores possíveis é da classe 'expression':</div><div><br></div><div><font face="courier new, monospace">### <code r></font></div>



<div>
<div><font face="courier new, monospace">link = "log"</font></div><div><font face="courier new, monospace">variance = "mu"</font></div></div><div><span style="font-family:'courier new',monospace">quasi(link = link, variance = as.expression(variance))</span><br>




</div><div><font face="courier new, monospace"># </font></div><div><font face="courier new, monospace"># Family: quasi </font></div><div><font face="courier new, monospace"># Link function: log </font></div><div><font face="courier new, monospace"><br>




</font></div><div><font face="courier new, monospace">variance = "mu(1-mu)"<br></font></div><div><div><font face="courier new, monospace">quasi(link = link, variance = as.expression(variance))</font></div><div>



<font face="courier new, monospace">#</font></div>
<div><font face="courier new, monospace">#Family: quasi </font></div><div><font face="courier new, monospace">#Link function: log </font></div><div><span style="font-family:'courier new',monospace">### </code></span><br>




</div></div><div class="gmail_extra"><br clear="all"><div><div dir="ltr">Éder Comunello <<a href="mailto:comunello.eder@gmail.com" target="_blank">c</a><a href="mailto:omunello.eder@gmail.com" target="_blank">omunello.eder@gmail.com</a>> <br>





Dourados, MS - [22 16.5'S, 54 49'W]<br></div></div>
<br><br><div class="gmail_quote"><br></div></div></div>
<br></div></div><div>_______________________________________________<br>
R-br mailing list<br>
<a href="mailto:R-br@listas.c3sl.ufpr.br" target="_blank">R-br@listas.c3sl.ufpr.br</a><br>
<a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br" target="_blank">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>
Leia o guia de postagem (<a href="http://www.leg.ufpr.br/r-br-guia" target="_blank">http://www.leg.ufpr.br/r-br-guia</a>) e forneça código mínimo reproduzível.<br></div></blockquote></div><div><br><br clear="all">
<br>-- <br>Wagner Hugo Bonat<br>
LEG - Laboratório de Estatística e Geoinformação<br>UFPR - Universidade Federal do Paraná
</div></div>
<br>_______________________________________________<br>
R-br mailing list<br>
<a href="mailto:R-br@listas.c3sl.ufpr.br" target="_blank">R-br@listas.c3sl.ufpr.br</a><br>
<a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br" target="_blank">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>
Leia o guia de postagem (<a href="http://www.leg.ufpr.br/r-br-guia" target="_blank">http://www.leg.ufpr.br/r-br-guia</a>) e forneça código mínimo reproduzível.<br></blockquote></div></div></div><br></div>
<br>_______________________________________________<br>
R-br mailing list<br>
<a href="mailto:R-br@listas.c3sl.ufpr.br" target="_blank">R-br@listas.c3sl.ufpr.br</a><br>
<a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br" target="_blank">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>
Leia o guia de postagem (<a href="http://www.leg.ufpr.br/r-br-guia" target="_blank">http://www.leg.ufpr.br/r-br-guia</a>) e forneça código mínimo reproduzível.<br></blockquote></div><br></div>
<br>_______________________________________________<br>
R-br mailing list<br>
<a href="mailto:R-br@listas.c3sl.ufpr.br">R-br@listas.c3sl.ufpr.br</a><br>
<a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br" target="_blank">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>
Leia o guia de postagem (<a href="http://www.leg.ufpr.br/r-br-guia" target="_blank">http://www.leg.ufpr.br/r-br-guia</a>) e forneça código mínimo reproduzível.<br></blockquote></div><br><br clear="all"><br>-- <br>Wagner Hugo Bonat<br>
LEG - Laboratório de Estatística e Geoinformação<br>UFPR - Universidade Federal do Paraná
</div>