我有一个函数,它在分子中有一个向量,在分母中有向量的总和。因此,每个组件是向量的一个组件除以一个取决于组件总和的函数。我想绘制一条曲线,表示第一个组件中的功能,固定其他组件。为什么这段代码不起作用?
y <- vector(length=2)
y0 <- c(1,2)
f <- function(y) y/(1+sum(y))
g <- function(x) f(c(x,y0[2]))[1]
curve(g, 0, 2)
f和g都按数值估算,但曲线函数给出错误:
Error in curve(g, 0, 2) :
'expr' did not evaluate to an object of length 'n'
我尝试了矢量化g但没有成功。感谢任何帮助。
答案 0 :(得分:5)
你可以尝试:
h <- Vectorize(g); curve(h, 0, 2)
答案 1 :(得分:0)
curve()
使用预期会被向量化的expr,因此它可以一次以n
的形式传递x
点。
观察f(1:10)
给出一个长度为10的向量,而g(1:10)
只给出一个值,curve()
不喜欢。一个简单的解决方法是对函数进行矢量化处理,例如。
curve(Vectorize(g)(x), 0, 2)
其中'expr' must be a function, or a call or an expression containing 'x'
。 curve(Vectorize(g), 0, 2)
不起作用,因为Vectorize(g)
首先需要用x
进行评估。