如何在R中的函数(写为字符串)中提取参数?

时间:2015-12-03 16:52:47

标签: r string function parsing parameters

假设我已经通过f <- function(x,y,z) {...}定义了一个函数。

我希望能够将调用该函数的表达式转换为该函数调用的参数列表;它与do.call函数相反。

例如,假设我有一个函数f,我也有一个字符串"f(2,1,3)"。 如何将字符串"f(2,1,3)"转换为参数列表list(x=1,y=2,z=3)

2 个答案:

答案 0 :(得分:2)

将字符串解析为R表达式后,使用match.call()将提供的字符串与正式参数进行匹配。

f <- function(x,y,z) {}
x <- "f(1,2,3)"

ee <- parse(text = x)[[1]]
cc <- match.call(match.fun(ee[[1]]), ee)
as.list(cc)[-1]
# $x
# [1] 1
# 
# $y
# [1] 2
# 
# $z
# [1] 3

答案 1 :(得分:1)

或者:

f <- function(x,y,z) {...}
s <- "f(x = 2, y = 1, z = 3)"

c <- as.list(str2lang(s))
c[-1]
# $x
# [1] 2
# 
# $y
# [1] 1
# 
# $z
# [1] 3

前一段时间,我一直在寻找解决方案,以便从字符串中重建函数调用。希望这对正在寻找类似问题的解决方案的人有用。