有没有办法从函数调用中未指定的评估公式中检索函数参数?
例如,考虑调用seq(1, 10)
。如果我想得到第一个参数,我可以使用quote()
并且简单地使用quote(seq(1,10))[[1]]
. 但是,这只适用于在函数调用中定义参数(而不是具有默认值)并且我需要知道它的确切位置的情况。
在此示例中,是否有某种方法可以在没有冗长的语句列表的情况下获取by
参数以查看它是否已定义?seq(1, 10)
if
首先要注意的是,您之后的所有命名参数(from
、to
、by
等)都属于seq.default()
,由您的调用分派的方法seq()
,而不是seq()
本身。(seq()
本身只有一个正式的,...
)。
从那里你可以使用这两个构建块
## (1) Retrieves pairlist of all formals
formals(seq.default)
# [long pairlist object omitted to save space]
## (2) Matches supplied arguments to formals
match.call(definition = seq.default, call = quote(seq.default(1,10)))
# seq.default(from = 1, to = 10)
做这样的事情:
modifyList(formals(seq.default),
as.list(match.call(seq.default, quote(seq.default(1,10))))[-1])
# $from
# [1] 1
#
# $to
# [1] 10
#
# $by
# ((to - from)/(length.out - 1))
#
# $length.out
# NULL
#
# $along.with
# NULL
#
# $...