2012-12-08 31 views
4

是否有强制使用字符向量评估多个变量的方法?使用字符向量强制评估多个变量

例如:

x = 1 
y = 2 

,而不是这样做:

force(x) 
force(y) 

做这样的事情:

force(ls()) 
+0

能不能介绍一下你是如何希望阐述 同样的事情使用这样的功能? –

+0

卡尔 - 不多=)我采取了懒人的方法,并张贴在这里。 – SFun28

+0

里卡多 - 它有点复杂。我有一种情况,一些代码并行运行(package'parallel'和'foreach'),而不是通过评估值,并行代码传递一个承诺。如果承诺能够得到解决,这将会是好的,但是新的并行流程无法访问承诺所做的相同环境。所以我需要在并行运行我的任务之前强制进行评估,以便承诺得到解决,并且值得通过,而不是承诺。就像我说的...复杂! =) – SFun28

回答

5

更换force()eval(as.symbol())将这样的伎俩:

## Modified from an example in ?force (h.t. @flodel) 
g <- function(x,y) { 
    lapply(ls(), function(X) eval(as.symbol(X))) 
    function() x+y 
} 
lg <- vector("list", 4) 
for (i in 1:2) for (j in 1:2) lg[[i+j-1]] <- g(i,j) 
lg[[1]]() 
# [1] 2 

这样做是因为,根据说明?force

[力量]是语义糖:只要评估符号会做

+0

甜!我用不可见()隐藏输出。 – SFun28

+0

很好地完成。自从原始帖子开始尝试某些事情后,回来发布几乎相同的东西 - 这里已经有了很好的答案。 – Aaron