有没有办法从评估公式中检索函数调用中未指定的函数参数? 例如,考虑调用seq(1,10).如果我想获得第一个参数,我可以使用quote()并简单地使用quote(seq(1,10))[[1]].但是,这仅在函数调用中定义
例如,考虑调用seq(1,10).如果我想获得第一个参数,我可以使用quote()并简单地使用quote(seq(1,10))[[1]].但是,这仅在函数调用中定义参数(而不是具有默认值)时才有效,并且我需要知道其确切位置.
在这个例子中,是否有一些方法可以从seq(1,10)获取by参数,而不需要冗长的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 # # $...