2010-09-04 18 views
5

he creado una función para el procesamiento de algunos de mis datos, así:variable global en función de R

a <- "old" 
test <- function (x) { 
    assign(x, "new", envir = .GlobalEnv) 
} 
test(a) 

Pero no se puede ver el cambio de la "vieja" a la "nueva", supongo que esto ¿es alguna de la "variable global", alguna sugerencia?

Gracias!

+4

Antes que nada, no lo hagas: jugar en un entorno global con funciones es casi siempre una mala idea, lo que lleva a sobreescrituras aleatorias, errores difíciles de seguir y caos en general. – mbq

Respuesta

7

para assign(x,value), x que ser un nombre de una variable no valor de la misma, por lo que x debe ser en formato de caracteres: assign("a","new"), y con el fin de ser utilizados en su función , intenta:

test <- function (x) 
{ 
    assign(deparse(substitute(x)), "new", envir = .GlobalEnv) 
} 

en su caso, se le creat una variable llamada "vieja" y asignar "nueva" a la misma:

> old 
[1] "new" 
+1

o simplemente una 'prueba (" a ")' con el código original. – Marek

2

se podía combinar su función con la función sapply, por ejemplo:

require (plyr) 
b <- sapply (a, test) 
b 
    old 
"new" 

de esa manera se está solicitando su función a los elementos reales de su a vector - como romunov señaló en su respuesta.

otro ejemplo:

a <- c("old", "oold", "ooold", "oooold") 
b <- sapply (a, test) 
b 
    old oold ooold oooold 
"new" "new" "new" "new" 
+1

¿cuál es la función plyr? – hatmatrix

+0

@Stephen: oh sí, claro. 'sapply' es del paquete base - corregido. la función plyr siempre se nombra con una 'p'. – mropa

Cuestiones relacionadas