曲线()在R中使用带参数的函数

curve() using a function with argument in R

ppt=function(v, tail = 0.5){
  if (tail == 1){
    6/pi^2/v^2
  } else {
    if (v < 11) {
      (1-tail)*(11-v)/55
      } else {tail*6/pi^2/(v-10)^2}
  }
}
curve(ppt(tail = 0.2))
Error in curve(ppt(tail = 0.2)) : 
  'expr' must be a function, or a call or an expression containing 'x'

ppt() 函数的 tail 值不同时如何绘制平滑曲线?

谢谢。

也许是下面的技巧?

w = 0.2
g <- function(z) ppt(z, tail = w)
curve(g)

并且不要忘记替换,正如@MrFlick 在评论中指出的那样:

if (v < 11) {
      (1-tail)*(11-v)/55
      } else {tail*6/pi^2/(v-10)^2}

来自

ifelse(v < 11, (1-tail)*(11-v)/55, tail*6/pi^2/(v-10)^2)

要么 (1) 重写 ppt 以对其进行矢量化(未显示),要么 (2) 如下所示使用矢量化,在这种情况下,无需修改 ppt。也使用此语法。

curve(Vectorize(ppt)(x, tail = 0.2), ylab = "ppt")