<div dir="ltr">rcoster, não era bem isso, mas acho que talvez sirva.<div>vou fazer um teste. pelo que vi o get carrega a definição do objeto, no caso, uma função.</div><div><br></div><div>o que eu achei no meio das buscas aqui foi esse código, mas acho que resolve parcial também.</div><div><br></div><div><a href="https://stat.ethz.ch/pipermail/r-help/2006-October/114431.html">https://stat.ethz.ch/pipermail/r-help/2006-October/114431.html</a><br></div><div><br></div><div><pre style="color:rgb(0,0,0)">f <- function(x) {
if (!is.list(x)) x <- list(x)
if (is.null(names(x))) names(x) <- ""
names(x)[names(x) == ""] <- NA
mc <- match.call()[-1][[1]]
if (length(mc) > 1) mc <- mc[-1]
ifelse(<a href="http://is.na">is.na</a>(names(x)), as.character(mc), names(x))
}
f(c(a = mean))
f(list(a = mean, b = sd))
f(c(f = function(x)x*x))
f(list(f = function(x)x*x, function(x)1-x))
L <- list(a = mean, b = sd)
f(L)
L <- list(a = mean, function(x)x)
f(L)
f(mean)
f(list(a = mean, sd))
f(list(mean, sd))
f(function(x)x*x)
f(list(function(x)x*x, function(y)y-1))</pre><pre style="color:rgb(0,0,0)"><br></pre><pre style="color:rgb(0,0,0)">obrigado pelo esforço. vou dar uma testada. <img src="cid:330@goomoji.gmail" goomoji="330" style="margin: 0px 0.2ex; vertical-align: middle;"></pre></div><div><br></div><div><br></div></div><div class="gmail_extra"><br clear="all"><div><div><br></div><div><br></div><div>Atenciosamente,</div><div><br></div>David Feitosa<br><div><div></div></div><div><br></div><div><div>(\_(\</div><div>(=°;°)</div><div>(("")("")</div></div></div>
<br><div class="gmail_quote">Em 24 de outubro de 2014 08:24, <span dir="ltr"><<a href="mailto:rcoster@gmail.com" target="_blank">rcoster@gmail.com</a>></span> escreveu:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">David,<br><br>Mais uma tentativa, agora mais certeira (acho eu): um <b>funcao <- get(<span style="line-height:19.7999992370605px">selecao</span>) </b>não resolve o teu problema? Ainda fica em 2 variáveis, mas pelo menos te livra da sequencia de if/elseif/else. <div><b><br></b><div><span style="line-height:19.7999992370605px">Para correr todos valores, bastaria um </span><b>for (selecao in c("singleLink", "completeLink", "groupAverage", "ward")) { ... }</b></div></div><div><b><br></b></div><div><br></div><div>[]'s</div><div class="HOEnZb"><div class="h5"><div><b><br></b></div><br><div class="gmail_quote">On Fri Oct 24 2014 at 09:07:07 David Feitosa <<a href="mailto:contato@davidfeitosa.com" target="_blank">contato@davidfeitosa.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Caríssimos,<div><br></div><div>Eu notei que o e-mail que enviei ontem não foi permitido pelo tamanho das imagens.</div><div>Estou reenviando, mas com um link externo que as contem.</div><div>Segue...</div><div>---</div><div><br></div><div><div>rcoster,</div><div><br></div><div>Na verdade não é bem isso. </div><div>Vou colocar aqui um trecho com a chamada do código</div><div>e pode ser que fique mais claro.</div><div><br></div><div>Estou fazendo uma disciplina em que o trabalho atual consiste em algoritmos de Clusterização.</div><div>Nele, tive que implementar a função que realiza o agrupamento hierárquico.</div><div>Esse agrupamento pode variar segundo fórmulas que geram as distâncias entre elementos do dataset.</div><div>Os métodos que já implementei foram: singleLink, completeLink, groupAverage e ward.</div><div><br></div><div>Na chamada da função, eu devo permitir que o usuário defina qual o critério da distância.</div><div>Como eu não sei fazer esse procedimento de pegar o nome da função,</div><div>tive que implementar passando uma sequência de caracteres e, internamente na função,</div><div>verificar a qual função ela mapeia, na seguinte forma:</div><div><br></div><div>#inicio</div><div><br></div><div>selecao <- "singleLink"</div><div>#selecao <- "completeLink"</div><div>#selecao <- "groupAverage"</div><div>#selecao <- "ward"</div><div><br></div><div>#chamada da funcao</div><div>clusterHierarquico(dados, selecao)</div><div><br></div><div>#dentro do corpo de clusterHierarquico(...)</div><div><br></div><div> #definindo a funcao para escolha dos valores entre distancias dos grupos</div><div> funcao <- NULL</div><div> if(selecao == "completeLink"){</div><div> funcao <- completeLink</div><div> }else if(selecao == "groupAverage"){</div><div> funcao <- groupAverage </div><div> }else if(selecao == "ward"){</div><div> funcao <- ward</div><div> }else{</div><div>#padrao</div><div> funcao <- singleLink</div><div> }</div><div><br></div><div>#usa funcao como método para calculo das distancias</div><div><br></div><div>#fim</div><div><br></div><div>Embora eu consiga gerar pelos nomes, fazendo a verificação com IFELSE, isso deixa o código "preso".</div><div>Se houvesse uma forma de pegar o nome da função que é passada como argumento, </div><div>eu poderia usar esse procedimento para pegar o nome e usar no plot do dendrograma.</div><div><br></div><div>Abaixo, seguem os gráficos que estou gerando de acordo com um dataset de países europeus com 2 atributos: </div><div>inflação e taxa de desemprego:</div><div><br></div><div><a href="http://figshare.com/articles/M_todos_de_Dist_ncia_para_Cluster_Hier_rquico/1213685" target="_blank">http://figshare.com/articles/M_todos_de_Dist_ncia_para_Cluster_Hier_rquico/1213685</a></div><div><br></div><div>Deysi enviou-me mensagem de que há uma forma, mas ainda não me retornou com a solução, pois não está com acesso ao PC dela no momento.</div><div><br></div><div>Caso tenha ficado mais claro agora e alguém saiba como resolver, agradeço antecipadamente.</div><div><br></div><div>Eu sei que pode parecer um "exagero", mas gostaria de deixar o código mais flexível, </div><div>até como forma de aprender para implementações mais complexas no futuro.</div></div><div><br></div></div><div class="gmail_extra"></div><div class="gmail_extra"><br clear="all"><div><div><br></div><div><br></div><div>Atenciosamente,</div><div><br></div>David Feitosa<br><div><div></div></div><div><br></div><div><div>(\_(\</div><div>(=°;°)</div><div>(("")("")</div></div></div>
<br></div><div class="gmail_extra"><div class="gmail_quote">Em 23 de outubro de 2014 10:11, <span dir="ltr"><<a href="mailto:rcoster@gmail.com" target="_blank">rcoster@gmail.com</a>></span> escreveu:</div></div><div class="gmail_extra"><div class="gmail_quote"><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">David,<br><br><div>Não sei se isso pode te ajudar ou não, mas o pacote data.table tem um comportamento parecido com o que tu quer: ao fazer um "banco2 <- banco" (onde banco é um arquivo data.table), as 2 variáveis ficam associadas: alterando banco2, tu altera também banco (e vice-versa). Na verdade, a operação '<-' para data.tables cria uma referência e não uma cópia.</div><div><br></div><div><b>Talvez</b> seja isso que tu precisa fazer. Agora, como fazer isso eu não sei.</div><div><div><br><div class="gmail_quote">On Thu Oct 23 2014 at 10:53:13 Benilton Carvalho <<a href="mailto:beniltoncarvalho@gmail.com" target="_blank">beniltoncarvalho@gmail.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Putz... pode ser que haja um meio, mas eu desconheco... se vc estivesse usando diretamente min/max, seria o match.call mesmo... mas assinalando-a para uma outra funcao, fica um pouco mais complexo... Sorry por nao ajudar.</div><div class="gmail_extra"><br><div class="gmail_quote">Em 23 de outubro de 2014 03:36, David Feitosa <span dir="ltr"><<a href="mailto:contato@davidfeitosa.com" target="_blank">contato@davidfeitosa.com</a>></span> escreveu:</div></div><div class="gmail_extra"><div class="gmail_quote"><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Benilton, não seria bem isso...<div><br></div><div>Seria algo do tipo:</div><div><br></div><div>#min e max são as funções padrões do R</div><div>f <- min<br></div><div>#f <- max</div><div><br></div><div>nome <- algumaFormaDeExtrairOnomeDaFuncao(f)</div><div><br></div><div>#dados = estrutura de dados para plotar</div><div>#nome = titulo do grafico</div><div>plot(dados, main = nome)</div><div><br></div><div>Eu gostaria de saber qual o nome da funcao <b><i>f</i></b>, nesse caso <i><b>min</b></i> ou <b><i>max</i></b>,</div><div>mas sem ter que fazer um "IFELSE" para mudar o titulo do plot.</div><div><br></div><div>No meu caso, serviria para saber qual função foi aplicada </div><div>aquela massa de dados e que gerou o gráfico.</div></div><div class="gmail_extra"><span><br clear="all"><div><div><br></div><div><br></div><div>Atenciosamente,</div><div><br></div>David Feitosa<br><div><div></div></div><div><br></div><div><div>(\_(\</div><div>(=°;°)</div><div>(("")("")</div></div></div>
<br></span><div class="gmail_quote">Em 22 de outubro de 2014 23:20, Benilton Carvalho <span dir="ltr"><<a href="mailto:beniltoncarvalho@gmail.com" target="_blank">beniltoncarvalho@gmail.com</a>></span> escreveu:<div><div><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">David,<div><br></div><div>perdoe minha ignorancia, mas eu nao entendi para o que vc utilizaria... mas, eu acho que o q vc quer e':</div><div><br></div><div>minhaFuncao <- function(){</div><div>## codigo</div><div>print(match.call()[[1]])</div><div>## mais codigo</div><div>}</div><div><br></div><div>vc pode ate' usar as.character(match.call()[[1]]) se quiser a string do nome da funcao...</div><div><br></div><div>b</div></div><div class="gmail_extra"><br><div class="gmail_quote">Em 22 de outubro de 2014 17:41, David Feitosa <span dir="ltr"><<a href="mailto:davidfeitosa@gmail.com" target="_blank">davidfeitosa@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">Caríssimos, boa noite.<div><br></div><div>Existe modo de se obter o nome de uma função em tempo de execução?</div><div><br></div><div>Explicando melhor: eu tenho uma função da forma</div><div><br></div><div>minhaFuncao <-function(){</div><div>#codigo</div><div>}</div><div><br></div><div>e uma variável que recebe essa função:</div><div><br></div><div>f <- minhaFuncao</div><div><br></div><div>Eu gostaria de obter o nome dela para ser usado em um gráfico</div><div><br></div><div>Em Java, eu sei que poderia usar a API de Reflection para, em tempo de execução,</div><div>analisar a classe, seus métodos etc e obter o nome para uso posterior.</div><div><br></div><div>Há como fazer o equivalente em R?</div><div><br></div><div>No meu caso, bastaria saber qual o nome da função que a variável "f" carrega.<br clear="all"><div><div dir="ltr"><div><br></div><div>Grato.</div><div><div><br></div><div>Atenciosamente,</div><div><br></div>David Feitosa<br><div><div></div></div><div><br></div><div><div>(\_(\</div><div>(=°;°)</div><div>(("")("")</div></div></div></div></div>
</div></div>
<br></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></blockquote></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></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></div>
______________________________<u></u>_________________<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/<u></u>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-<u></u>guia</a>) e forneça código mínimo reproduzível.</blockquote></div>
</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>
______________________________<u></u>_________________<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/<u></u>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-<u></u>guia</a>) e forneça código mínimo reproduzível.</blockquote></div>
</div></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></div>