Passando um objeto para "character"

Ola amigos de R, Estou tentando fazer um função para um plot mas sem obrigar que o usuário chame as variáveis de um banco entre aspas. Isso porque no conjunto de funções hierarquizadas, todas as outras não precisam que os argumentos sejam character, vai facilitar muito inclusive pra documentar. Eu achei a função Hmisc::Cs que faz o que eu gostaria, mas não gostaria de criar uma dependencia do Hmisc apenas por conta dessa função. Ao mesmo tempo, eu não consigo saber o que tem dentro da Cs() por que quando digito Cs no console, esse retorna apenas o namespace. Eu gostaria de clonar a Cs ou dar um outro jeito de não obrigar que usuario entrasse as variáveis como character. Eu dei uma olhada nas fuçoes parse, deparse e substitute no pacote base mas não consegui me desenrolar. Assim funciona mydata <- data.frame(Var1 = rnorm(10, 1 , 2), Var2 = rnorm(10, 2, 2)) myplot <- function(x, y, data){ plot(data[ , c(x, y)]) } myplot("Var1", "Var2", mydata) # Mas eu gostaria de algo assim... myplot <- function(x, y, data){ if ( is.character(x) & is.character(y)){ plot(data[ , c(x, y)]) } else { # essa parte não funciona plot(data[ , Hmisc::Cs(x, y)]) # essa é a parte que estou enrolado pq não quero depender de Hmisc } myplot(Var1, Var2, mydata) Eu pensei numa coisa do tipo ... with(mydata, plot(Var1 , Var2)) Mas dentro da função não funciona... myplot <- function(x, y, data){ if ( is.character(x) & is.character(y)){ plot(data[ , c(x, y)]) } else { with(data, plot(x, y)) } } myplot( Var1, Var2, mydata) Abraços fortes, Pedro Brasil

Pedro, você pode usar um attach no else. attach(data) plot(x, y) detach(data)

Eu ja tinha pensado nessa possibilidade tambem. Fora da função funciona, mas quando eu coloco dentro da função, dá o mesmo erro. Acho que é porque o x e y possuem os nomes de vetores que não estão guardados como nomes. Ainda acho que a solução esta em fazer essa "substituição", mas não encontrei como ainda. Pedro Brasil 2016-09-09 12:01 GMT-03:00 Diego Miro <d.miro1089@gmail.com>:
Pedro, você pode usar um attach no else.
attach(data) plot(x, y) detach(data)

Diego, A ideia parece boa, mas apenas para uma função para uso "interno" ou "pessoal". . . Uma função de uso geral com um *attach* escondido dentro pode gerar uma série de erros inesperados cuja elucidação por parte do emissor do pacote (Pedro Emmanuel) será um pesadelo. A opção do with() é a mais segura... On Fri, Sep 9, 2016 at 12:01 PM, Diego Miro via R-br < r-br@listas.c3sl.ufpr.br> wrote:
Pedro, você pode usar um attach no else.
attach(data) plot(x, y) detach(data)
_______________________________________________ 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 (3)
-
Cesar Rabak
-
Diego Miro
-
Pedro Emmanuel Alvarenga Americano do Brasil