2012-12-08 32 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