我发现很难解释我想用文字做什么,所以我只是把我的代码贴在下面。
fun <- function(a, x) {
output <- a*dlnorm(a, 2.72 - x, 0.52)
return(output)
}
fun2 <- function(x) {
output2 <- integrate(fun, lower = 0, upper = 200, x = x)
return(output2)
}
a <- seq(-5, 5, .1)
list <- list()
for(ai in 1:length(a)){
list[[ai]] <- fun2(a[[ai]])
}
list %>%
map(pluck, "value") %>%
unlist() %>%
bind_cols(a) %>%
ggplot(aes(x = `...2`, y = `...1`)) +
geom_line()
所以我们首先有一个函数,它接受a
和x
的参数。然后我们做另一个函数,将第一个函数在x
的值上积分,最后我们绘制a
的值上的积分。
请注意,我正在使用for循环手动计算绘图曲线。我想避免使用for循环,我想直接通过geom_function
来完成。但是我不知道该怎么办。我一直在尝试这个
ggplot() +
geom_function(fun = fun2) +
xlim(-5, 5)
但不幸的是这行不通。那么,在代码中指定这一点的正确方法是什么呢?
1条答案
按热度按时间x4shl7ld1#
integrate
函数不会从vector输入返回vector。它只需要一个输入,并返回一个结构作为输出,例如。所以你需要做的是让
fun2
返回一个与x
形状相同的值的向量。这涉及到一个循环,但您可以使用Vectorize
函数隐藏它。比如说现在
geom_function(fun = fun2)
就可以了。