【发布时间】:2021-05-22 21:23:27
【问题描述】:
这是我之前提出的问题 (Evaluating a function pointed to by a string in R) 的后续问题,旨在使问题和解决方案更加通用。假设我有以下内容:
x <- 1:3
y <- 2
foo <- function(x, y) {x^y}
a <- "foo"
b <- "x"
c <- "y"
我希望能够使用由 a、b 和 c 定义的字符串来评估函数 foo。 match.fun(a)(b, c) 之类的东西,我知道这是错误的,但会返回
[1] 1 4 9
或者为了让问题更笼统,假设
x <- 1:3
y <- 2
foo <- function(x, y) {x^y}
a <- "foo"
b <- "x, y"
match.fun 如何提供相同的解决方案?
感谢任何帮助。
【问题讨论】:
-
R 是一种适当的函数式语言,它允许元编程来操作代码。与其他更像宏的编程语言(如 SAS)不同,语言符号与字符串完全不同。您需要在可解析的块中使用 R 代码。尽可能避免将任意代码放入字符串中。但如果无法避免,您可以使用内置的
parse()函数,这基本上就是将控制台输入的任何字符串转换为可执行代码的方式。