[R-br] Nome de Função
David Feitosa
davidfeitosa em gmail.com
Quinta Outubro 23 19:41:31 BRST 2014
rcoster,
Na verdade não é bem isso.
Vou colocar aqui um trecho com a chamada do código
e pode ser que fique mais claro.
Estou fazendo uma disciplina em que o trabalho atual consiste em algoritmos
de Clusterização.
Nele, tive que implementar a função que realiza o agrupamento hierárquico.
Esse agrupamento pode variar segundo fórmulas que geram as distâncias entre
elementos do dataset.
Os métodos que já implementei foram: singleLink, completeLink, groupAverage
e ward.
Na chamada da função, eu devo permitir que o usuário defina qual o critério
da distância.
Como eu não sei fazer esse procedimento de pegar o nome da função,
tive que implementar passando uma sequência de caracteres e, internamente
na função,
verificar a qual função ela mapeia, na seguinte forma:
#inicio
selecao <- "singleLink"
#selecao <- "completeLink"
#selecao <- "groupAverage"
#selecao <- "ward"
#chamada da funcao
clusterHierarquico(dados, selecao)
#dentro do corpo de clusterHierarquico(...)
#definindo a funcao para escolha dos valores entre distancias dos grupos
funcao <- NULL
if(selecao == "completeLink"){
funcao <- completeLink
}else if(selecao == "groupAverage"){
funcao <- groupAverage
}else if(selecao == "ward"){
funcao <- ward
}else{
#padrao
funcao <- singleLink
}
#usa funcao como funcao para calculo das distancias
#fim
Embora eu consiga gerar pelos nomes, fazendo a verificação com IFELSE, isso
deixa o código "preso".
Se houvesse uma forma de pegar o nome da função que é passada como
argumento,
eu poderia usar esse procedimento para pegar o nome e usar no plot do
dendrograma.
Abaixo, seguem os gráficos que estou gerando de acordo com um dataset de
países europeus com 2 atributos:
inflação e taxa de desemprego.
Para ver melhor, basta clicar no gráfico e solicitar abrir em uma nova
janela ou aba do navegador.
[image: Imagem inline 1][image: Imagem inline 2][image: Imagem inline 3][image:
Imagem inline 4]
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.
Caso tenha ficado mais claro agora e alguém saiba como resolver, agradeço
antecipadamente.
Eu sei que pode parecer um "exagero", mas gostaria de deixar o código mais
flexível,
até como forma de aprender para implementações mais complexas no futuro.
Atenciosamente,
David Feitosa
(\_(\
(=°;°)
(("")("")
Em 23 de outubro de 2014 10:11, <rcoster em gmail.com> escreveu:
> David,
>
> 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.
>
> *Talvez* seja isso que tu precisa fazer. Agora, como fazer isso eu não
> sei.
>
> On Thu Oct 23 2014 at 10:53:13 Benilton Carvalho <
> beniltoncarvalho em gmail.com> wrote:
>
>> 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.
>>
>> Em 23 de outubro de 2014 03:36, David Feitosa <contato em davidfeitosa.com>
>> escreveu:
>>
>> Benilton, não seria bem isso...
>>>
>>> Seria algo do tipo:
>>>
>>> #min e max são as funções padrões do R
>>> f <- min
>>> #f <- max
>>>
>>> nome <- algumaFormaDeExtrairOnomeDaFuncao(f)
>>>
>>> #dados = estrutura de dados para plotar
>>> #nome = titulo do grafico
>>> plot(dados, main = nome)
>>>
>>> Eu gostaria de saber qual o nome da funcao *f*, nesse caso *min* ou
>>> *max*,
>>> mas sem ter que fazer um "IFELSE" para mudar o titulo do plot.
>>>
>>> No meu caso, serviria para saber qual função foi aplicada
>>> aquela massa de dados e que gerou o gráfico.
>>>
>>>
>>>
>>> Atenciosamente,
>>>
>>> David Feitosa
>>>
>>> (\_(\
>>> (=°;°)
>>> (("")("")
>>>
>>> Em 22 de outubro de 2014 23:20, Benilton Carvalho <
>>> beniltoncarvalho em gmail.com> escreveu:
>>>
>>> David,
>>>>
>>>> perdoe minha ignorancia, mas eu nao entendi para o que vc utilizaria...
>>>> mas, eu acho que o q vc quer e':
>>>>
>>>> minhaFuncao <- function(){
>>>> ## codigo
>>>> print(match.call()[[1]])
>>>> ## mais codigo
>>>> }
>>>>
>>>> vc pode ate' usar as.character(match.call()[[1]]) se quiser a string do
>>>> nome da funcao...
>>>>
>>>> b
>>>>
>>>> Em 22 de outubro de 2014 17:41, David Feitosa <davidfeitosa em gmail.com>
>>>> escreveu:
>>>>
>>>>> Caríssimos, boa noite.
>>>>>
>>>>> Existe modo de se obter o nome de uma função em tempo de execução?
>>>>>
>>>>> Explicando melhor: eu tenho uma função da forma
>>>>>
>>>>> minhaFuncao <-function(){
>>>>> #codigo
>>>>> }
>>>>>
>>>>> e uma variável que recebe essa função:
>>>>>
>>>>> f <- minhaFuncao
>>>>>
>>>>> Eu gostaria de obter o nome dela para ser usado em um gráfico
>>>>>
>>>>> Em Java, eu sei que poderia usar a API de Reflection para, em tempo de
>>>>> execução,
>>>>> analisar a classe, seus métodos etc e obter o nome para uso posterior.
>>>>>
>>>>> Há como fazer o equivalente em R?
>>>>>
>>>>> No meu caso, bastaria saber qual o nome da função que a variável "f"
>>>>> carrega.
>>>>>
>>>>> Grato.
>>>>>
>>>>> Atenciosamente,
>>>>>
>>>>> David Feitosa
>>>>>
>>>>> (\_(\
>>>>> (=°;°)
>>>>> (("")("")
>>>>>
>>>>> _______________________________________________
>>>>> 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.
>>>>
>>>
>>>
>>> _______________________________________________
>>> 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.
>
>
> _______________________________________________
> 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.
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20141023/eb2d3663/attachment-0001.html>
-------------- Próxima Parte ----------
Um anexo não-texto foi limpo...
Nome: image.png
Tipo: image/png
Tamanho: 43582 bytes
Descrição: não disponível
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20141023/eb2d3663/attachment-0004.png>
-------------- Próxima Parte ----------
Um anexo não-texto foi limpo...
Nome: image.png
Tipo: image/png
Tamanho: 42109 bytes
Descrição: não disponível
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20141023/eb2d3663/attachment-0005.png>
-------------- Próxima Parte ----------
Um anexo não-texto foi limpo...
Nome: image.png
Tipo: image/png
Tamanho: 41872 bytes
Descrição: não disponível
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20141023/eb2d3663/attachment-0006.png>
-------------- Próxima Parte ----------
Um anexo não-texto foi limpo...
Nome: image.png
Tipo: image/png
Tamanho: 42600 bytes
Descrição: não disponível
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20141023/eb2d3663/attachment-0007.png>
Mais detalhes sobre a lista de discussão R-br