【问题标题】:Force evaluation of multiple variables using vector of character使用字符向量对多个变量进行强制评估
【发布时间】:2012-12-08 20:57:39
【问题描述】:

有没有办法强制使用字符向量评估多个变量?

例如:

x = 1
y = 2

而不是这样做:

force( x )
force( y )

做这样的事情:

force( ls() )

【问题讨论】:

  • 您能否详细说明您希望如何使用这些功能?
  • Carl - 不多 =) 我采取了懒人的方法并在此处发布。
  • Ricardo - 它有点复杂。我有一些代码并行运行的情况(包'parallel'和'foreach'),但并行代码不是传递评估值,而是传递一个承诺。如果可以解决承诺,这将是可以的,但是新的并行进程无法访问与承诺相同的环境。所以我需要在并行运行我的任务之前强制评估,以便解决承诺并传递值,而不是承诺。就像我说的......复杂! =)

标签: r


【解决方案1】:

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 中所述:

[force] 是语义糖:只需评估符号即可 一样的

【讨论】:

  • 甜!!我用 invisible() 包裹以隐藏输出。
  • 做得很好。自从原始帖子以来,我自己断断续续地尝试了一些东西,然后回来发布几乎相同的东西 - 在这里你已经有了一个很好的答案。
猜你喜欢
  • 2013-09-07
  • 1970-01-01
  • 2018-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多