2010-09-04 19 views
5

stworzyłem funkcję przetwarzania niektórych moich danych, na przykład:zmienna globalna funkcja R

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

Ale nie mogę zobaczyć zmiany z „starego” z „nowym”, myślę, że to jest jakąś "zmienną globalną", jakąkolwiek sugestią?

Dzięki!

+4

Po pierwsze, nie rób tego - zakłócanie komunikacji w globalnym środowisku z funkcjami prawie zawsze jest złym pomysłem prowadzącym do przypadkowych nadpisań, trudnymi do śledzenia błędów i ogólnego chaosu. – mbq

Odpowiedz

7

dla assign(x,value), x musi być nazwa zmiennej nie warto, więc x powinny być w formie znaków: assign("a","new"), w celu wykorzystania w funkcji , spróbuj:

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

w twoim przypadku będzie creat zmienną o nazwie "stare" i przypisać "nowy" do niego:

> old 
[1] "new" 
+1

lub po prostu 'test (" a ")' z oryginalnym kodem. – Marek

2

można połączyć funkcję z funkcją sapply, np

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

że sposób starasz się swoją funkcję do rzeczywistych elementów swojej a Wektor - jak romunov wskazał w swojej odpowiedzi.

inny przykład:

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

który z nich jest funkcją plyr? – hatmatrix

+0

@ Stephen: o tak, tak. 'sapply' pochodzi z pakietu podstawowego - poprawił to. funkcja plyr jest zawsze nazwana jednym "p". – mropa