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(is.na(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))
obrigado pelo esforço. vou dar uma testada.
David,
Mais uma tentativa, agora mais certeira (acho eu): um funcao <- get(selecao) não resolve o teu problema? Ainda fica em 2 variáveis, mas pelo menos te livra da sequencia de if/elseif/else.Para correr todos valores, bastaria um for (selecao in c("singleLink", "completeLink", "groupAverage", "ward")) { ... }[]'sOn Fri Oct 24 2014 at 09:07:07 David Feitosa <contato@davidfeitosa.com> wrote:Caríssimos,Eu notei que o e-mail que enviei ontem não foi permitido pelo tamanho das imagens.Estou reenviando, mas com um link externo que as contem.Segue...---rcoster,Na verdade não é bem isso.Vou colocar aqui um trecho com a chamada do códigoe 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:#inicioselecao <- "singleLink"#selecao <- "completeLink"#selecao <- "groupAverage"#selecao <- "ward"#chamada da funcaoclusterHierarquico(dados, selecao)#dentro do corpo de clusterHierarquico(...)#definindo a funcao para escolha dos valores entre distancias dos gruposfuncao <- NULLif(selecao == "completeLink"){funcao <- completeLink}else if(selecao == "groupAverage"){funcao <- groupAverage}else if(selecao == "ward"){funcao <- ward}else{#padraofuncao <- singleLink}#usa funcao como método para calculo das distancias#fimEmbora 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: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@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@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@davidfeitosa.com> escreveu:_______________________________________________Benilton, não seria bem isso...Seria algo do tipo:#min e max são as funções padrões do Rf <- min#f <- maxnome <- algumaFormaDeExtrairOnomeDaFuncao(f)#dados = estrutura de dados para plotar#nome = titulo do graficoplot(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 aplicadaaquela massa de dados e que gerou o gráfico.Atenciosamente,David Feitosa(\_(\(=°;°)(("")("")Em 22 de outubro de 2014 23:20, Benilton Carvalho <beniltoncarvalho@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(){## codigoprint(match.call()[[1]])## mais codigo}vc pode ate' usar as.character(match.call()[[1]]) se quiser a string do nome da funcao...bEm 22 de outubro de 2014 17:41, David Feitosa <davidfeitosa@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 formaminhaFuncao <-function(){#codigo}e uma variável que recebe essa função:f <- minhaFuncaoEu gostaria de obter o nome dela para ser usado em um gráficoEm 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@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.
_______________________________________________
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.
_______________________________________________
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.
_______________________________________________
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.