Ваша проблема в том, как вы звоните limitRange
.Его первый аргумент должен быть функцией, но вы даете ему dweibull(shape = 2, scale = 1.12)
, который не является функцией.Фактически, это вызывает ошибку:
dweibull(shape = 2, scale = 1.12)
# Error in dweibull(shape = 2, scale = 1.12) :
# argument "x" is missing, with no default
Превращение этого в функцию работает:
ggplot(data.frame(x = c(0, 2)), aes(x)) +
stat_function(fun = dweibull,
args = list(shape = 2, scale = 1.12)) +
stat_function(
fun = limitRange(function(z) dweibull(z, shape = 2, scale = 1.12), 0.0297, 0.1189),
geom = "area",
fill = "blue",
alpha = 0.2
)
В целом более чистый способ будет дать limitRange
a ...
аргумент для fun
:
limitRange <- function(fun, ..., min, max) {
return(function(x) {
y <- fun(x, ...)
y[x < min | x > max] <- NA
return(y)
})
}
ggplot(data.frame(x = c(0, 2)), aes(x)) +
stat_function(fun = dweibull,
args = list(shape = 2, scale = 1.12)) +
stat_function(
fun = limitRange(dweibull, shape = 2, scale = 1.12, min = 0.0297, max = 0.1189)
geom = "area",
fill = "blue",
alpha = 0.2
)
Вам необходимо будет указать аргументы min
и max
таким образом (и это может привести к ошибкам, если fun
принимает min
и max
аргументы ... больше уникальных имен может быть лучше).