R 如何提取函数内的默认值集?

R 如何提取函数内的默认值集?,r,function,R,Function,我已经创建了函数toy_fun,我正在函数内设置c的默认值: 玩具乐趣=功能(a、b、c){ 如果(缺少(c))c=1 和[1]3 现在想象一下,我无法访问toy_-fun的脚本,但我仍然想知道,事实发生后,toy_-fun的参数是什么,它们的赋值和默认值是什么,如果有的话 我尝试了以下方法,但它没有给我c的值: 库(rlang) 趣味电话$a:符号 #>$b:符号 #>$c:符号 用户参数列表(共2个) #>$a:num 1 #>$b:num 1 调用参数点对列表,共3个 #>$a:2人名单

我已经创建了函数
toy_fun
,我正在函数内设置
c
的默认值:

玩具乐趣=功能(a、b、c){ 如果(缺少(c))c=1 和[1]3 现在想象一下,我无法访问
toy_-fun
的脚本,但我仍然想知道,事实发生后,
toy_-fun
的参数是什么,它们的赋值和默认值是什么,如果有的话

我尝试了以下方法,但它没有给我
c
的值:

库(rlang)
趣味电话$a:符号
#>$b:符号
#>$c:符号
用户参数列表(共2个)
#>$a:num 1
#>$b:num 1
调用参数点对列表,共3个
#>$a:2人名单
#>..$a:num 1
#>..$b:num 1
#>$b:符号
#>$c:符号
问题

有没有办法知道
c
的值设置为多少


由(v0.3.0)创建于2021-03-26,我将做一个简化假设,即您只想知道函数末尾的参数是什么。因此,如果在缺少初始检查后再次修改
c
,这种方法也将捕获该更改

myEnv <- new.env()

trace(
  toy_fun, 
  print = FALSE,
  exit = quote(
    assign(
      "fxArgs", 
      mget(names(formals(toy_fun))),
      envir = myEnv
    )
  )
)

myEnv我知道,我知道这不是你想要的,但是你可以试试
body(toy_-fun)
,你可以进一步这样打破它:
as.list(as.list(body(toy_-fun))[[2]]]][[3]
谢谢你的建议!但是你为什么要叫
as.list
两次呢?
as.list(body(toy_-fun))[[2][[3]]
也能工作。按如下方式分解:
body(toy_-fun)
,它会在花括号之间生成一个内部脚本,每个元素(行)基本上是一个列表元素,因此第一个列表,然后在该列表中,c位于第二个列表的3个位置,这就是为什么,但是如果我运行
as.list(body(toy_-fun))[[2][[3]]
我仍然得到相同的结果。分配给
c
的函数内部的代码可以是任意复杂的。除了执行函数体,没有通用的方法来确定它被设置为哪个值。当然,您可以静态分析
body(f)如PKumar所示,但是,如果根据运行时条件有条件地指定“代码> C<代码>代码,那么这是不充分的。请考虑设计实例<代码>(样本(2, 1)=1)。c=1或者c=2
——既然这在一般情况下是不可能的,那么您能更准确地解释一下您需要它做什么吗?对于您的特定用例,可能有一个解决方案。