R:确保早期评估默认参数

时间:2016-06-28 08:56:12

标签: r lazy-evaluation

为R函数提供默认参数时,首次在函数中使用时会计算此参数。如何以优雅的方式更早地评估默认参数?例如:

f <- function(x, y = 2 * x)
{
  if(x < 0) x = 10
  y
}

f(1) ## Returns 2
f(-1) ## Returns 20 but I would like it to return -2    

由于

1 个答案:

答案 0 :(得分:1)

答案并非难以找到。功能&#39; force&#39;诀窍:

f <- function(x, y = 2 * x)
{
  force(y)
  if(x < 0) x = 10
  y
}

f(1) ## Returns 2
f(-1) ## -2