2010-09-04 205 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