用户指定的函数与R中的运算符

时间:2015-05-08 13:25:24

标签: r function functional-programming operators eval

我想使用用户指定的函数并将该函数应用于值列表。我设想用户会给出一个'公式'作为包含变量和运算符名称的字符串,例如"a * b %% c - d / e ^ f + g %/% h"

以下玩具示例有效

prmlist <- list(a=1:10, b=21:30, c=31:40, d=4, e=5, f=6, g=7, h=8) 
with(prmlist, a * b %% c - d / e ^ f + g %/% h)

当我想在函数中使用此方法时,问题就开始了。要做到这一点,我必须得到&#39;公式&#39;由用户在函数内部指定。字符串似乎是明显的路线。问题是如何在函数内部进行评估。 do.call()似乎并不合适,因为运算符实际上都是一个函数。我希望像

那样简单
my.formula <- "a * b %% c - d / e ^ f + g %/% h"
with(prmlist, eval(my.formula)) 

会奏效,但事实并非如此。

1 个答案:

答案 0 :(得分:4)

您可以使用substitute()代替您的运营商:

my.formula <- substitute(a * b %% c - d / e ^ f + g %/% h)
with(prmlist, eval(my.formula)) 
 [1]  20.99974  43.99974  68.99974  95.99974 124.99974 155.99974 188.99974
 [8] 223.99974 260.99974 299.99974

更新:如果命令是字符串,您可以使用parse

myCmd <- "a * b %% c - d / e ^ f + g %/% h"
with(prmlist, eval( parse(text=myCmd) ))
 [1]  20.99974  43.99974  68.99974  95.99974 124.99974 155.99974 188.99974
 [8] 223.99974 260.99974 299.99974