假设我已经通过f <- function(x,y,z) {...}
定义了一个函数。
我希望能够将调用该函数的表达式转换为该函数调用的参数列表;它与do.call
函数相反。
例如,假设我有一个函数f
,我也有一个字符串"f(2,1,3)"
。
如何将字符串"f(2,1,3)"
转换为参数列表list(x=1,y=2,z=3)
?
答案 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
前一段时间,我一直在寻找解决方案,以便从字符串中重建函数调用。希望这对正在寻找类似问题的解决方案的人有用。