2010-09-04 204 views
5

我創建了一個功能,用於處理我的一些數據,如:全局變量

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

但我不能看到「老」到「新」,我想這個變化是一些「全局變量」,有沒有什麼建議?

謝謝!

+4

首先,不要這樣做 - 在具有功能的全球環境中搞亂幾乎總是一個壞主意,導致隨機覆蓋,很難追蹤錯誤和整體混亂。 – mbq 2010-09-04 08:46:22

回答

7

assign(x,value),X必須是一個變量而不是它的值的名稱,所以x應以字體形式:assign("a","new"),並且爲了在函數中使用嘗試:

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

,你會創造一個名爲 「老」 的變量,並將 「新」 來了:

> old 
[1] "new" 
+1

或只是一個測試(「a」)'與原始代碼。 – Marek 2010-09-05 15:17:40

2

,你可以用sapply功能, 例如,結合您的功能:

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

你申請你的函數你a向量的實際元素的方式 - 如romunov在他的回答中指出。

其他如:

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

哪一個是plyr函數? – hatmatrix 2010-09-06 09:58:21

+0

@Stephen:哦,是的,沒錯。 'sapply'來自基礎包 - 糾正了這一點。 plyr函數總是用一個'p'命名。 – mropa 2010-09-06 14:05:13