Bom dia,

Elias, particularmente eu acredito que os colegas propuseram soluções melhores, mas para seu código funcionar você deve definir o "ambiente" onde a função será executada. Alterei seu código pra testar:

### <code r>
remove.variables <- function(dataset.name, vars.to.remove)
{
  # scan the variables to be removed
  for (x in 1 : length(vars.to.remove))
  {
    # transform command.Remove in "data$variable <- NULL"
    command.Remove <- paste(dataset.name,"$", vars.to.remove[x], " <- NULL", sep="")
    
    # execute the command
    print(command.Remove)
    eval(parse(text=command.Remove), envir=.GlobalEnv)
  }
}

df <- get(data(mtcars))
names(df)
 # [1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear" "carb"

remove.variables("df", c("mpg", "hp"))
# [1] "df$mpg <- NULL"
# [1] "df$hp <- NULL"

names(df)
# [1] "cyl"  "disp" "drat" "wt"   "qsec" "vs"   "am"   "gear" "carb"
### </code>



================================================
Éder Comunello
Agronomist (UEM), MSc in Environ. Sciences (UEM)
DSc in Agricultural Systems Engineering (USP/Esalq)
Brazilian Agricultural Research Corporation (Embrapa)
Dourados, MS, Brazil |<O>|
================================================
GEO, -22.2752, -54.8182, 408m
UTC-04:00 / DST: UTC-03:00




Em 29 de fevereiro de 2016 08:26, Pedro Emmanuel Alvarenga Americano do Brasil <emmanuel.brasil@gmail.com> escreveu:
Engraçado... eu usaria uma coisa do tipo

  1. remove.variables <- function(dataset.name, vars.to.remove)
  2. {
  3.   output <- dataset.name[,-which(names(dataset.name) %in% vars.to.remove]
  4.   output
dataset <- remove.variable(dataset,c("var1","var2","var3"))

Pedro Brasil

Em 28 de fevereiro de 2016 08:55, Elias Carvalho <ecacarva@gmail.com> escreveu:
Ola Pessoal

Para facilitar a vida de um usuário leigo, eu criei uma função para excluir as colunas de uma tabela, conforme código abaixo:

  1. remove.variables <- function(dataset.name, vars.to.remove)
  2. {
  3.   # scan the variables to be removed
  4.   for (x in 1 : length(vars.to.remove))
  5.   {
  6.     # transform command.Remove in "data$variable <- NULL"
  7.     command.Remove <- paste(dataset.name,"$",vars.to.remove[x], " <- NULL",sep="")
  8.     # execute the command
  9.     command.Remove <- eval(parse(text=command.Remove))
  10.   } #  for (x in 1 : length(vars.to.remove))
  11. } # remove.variables <- function(dataset.name, vars.to.remove)

Fazendo um teste local, ou seja, executando o procedimento abaixo com as variáveisdataset.name, vars.to.remove carregadas respectivamente com o nome do meu data frame "data" e com o nome de duas variáveis "var1" e "var5" a serem removidas e executando da linha 2 a 11 tudo tunciona bem e as colunas são removidas.

dataset.name <- "data"
vars.to.remove<-c("var1", "var5")

No entanto se carrego a função e executo os procedimentos abaixo em outro script, a função é executada sem erro, mas não remove nenhuma coluna do data frame:

vars.to.remove = c("var1", "var5")
dataset.name = "data"

remove.variables(dataset.name, vars.to.remove)

Eu acredito que tem a ver com o ambiente, acesso global algo assim mas não estou achando a solução.

Agradeço se aguem puder me ajudar.

--
Best regards... 8^)

The mind that is open to new ideas never come back
to its original size”  Albert Einstein 


_____________________________________________
Prof. Elias César Araújo de Carvalho
CV: http://lattes.cnpq.br/4248328961021251

_______________________________________________
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.