R 中带有运算符的用户指定函数
User specified function with operators in R
我想使用用户指定的函数并将该函数应用于值列表。我设想用户将给出 'formula' 作为包含变量和运算符名称的字符串,例如"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)
当我想在函数中使用这种方法时,问题就出现了。为此,我必须在函数内获取用户指定的 'formula'。字符串似乎是显而易见的路线。问题是如何在函数内部对其进行评估。 do.call() 似乎不合适,因为每个运算符实际上都是一个函数。我希望像
这样简单的东西
my.formula <- "a * b %% c - d / e ^ f + g %/% h"
with(prmlist, eval(my.formula))
会起作用,但不会。
您可以使用 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
我想使用用户指定的函数并将该函数应用于值列表。我设想用户将给出 'formula' 作为包含变量和运算符名称的字符串,例如"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)
当我想在函数中使用这种方法时,问题就出现了。为此,我必须在函数内获取用户指定的 'formula'。字符串似乎是显而易见的路线。问题是如何在函数内部对其进行评估。 do.call() 似乎不合适,因为每个运算符实际上都是一个函数。我希望像
这样简单的东西my.formula <- "a * b %% c - d / e ^ f + g %/% h"
with(prmlist, eval(my.formula))
会起作用,但不会。
您可以使用 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