使用R中的默认值检索函数调用的参数

时间:2013-06-10 15:47:09

标签: r parsing

有没有办法从评估公式中检索函数调用中未指定的函数参数?

例如,考虑调用seq(1, 10)。如果我想获得第一个参数,我可以使用quote()并简单地使用quote(seq(1,10))[[1]]。但是,这仅在函数调用中定义参数(而不是具有默认值)时才有效,并且我需要知道它的确切位置。

在这个示例中,是否有某种方法可以从by获取seq(1, 10)参数而不需要冗长的if语句列表来查看它是否已定义?

1 个答案:

答案 0 :(得分:8)

首先要注意的是,您所追求的所有命名参数(fromtoby等)属于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
# 
# $...