曲线()在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")
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")