curve()出错:'expr'没有计算长度为'n'的对象

时间:2015-01-31 15:34:42

标签: r function vector curve

我有一个函数,它在分子中有一个向量,在分母中有向量的总和。因此,每个组件是向量的一个组件除以一个取决于组件总和的函数。我想绘制一条曲线,表示第一个组件中的功能,固定其他组件。为什么这段代码不起作用?

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但没有成功。感谢任何帮助。

2 个答案:

答案 0 :(得分:5)

你可以尝试:

h <- Vectorize(g); curve(h, 0, 2)

enter image description here

答案 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进行评估。