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

Dan*_*Dan 6 curve r function vector

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

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)
Run Code Online (Sandbox Code Playgroud)

f和g都在数值处按预期进行评估,但曲线函数给出了误差:

Error in curve(g, 0, 2) : 
  'expr' did not evaluate to an object of length 'n'
Run Code Online (Sandbox Code Playgroud)

我试过没有成功的矢量化g.感谢任何帮助.

Ste*_*pré 5

你可以尝试:

h <- Vectorize(g); curve(h, 0, 2)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 从`?curve`:曲线处理expr的方式引起了混乱.它首先查看expr是否是一个名称(也称为符号),在这种情况下,它被视为一个函数的名称,并且expr被一个名为xname的单个参数的expr调用所取代. .否则它会检查expr是一个调用还是一个表达式,并且它包含对xname给出的变量的引用(使用all.vars):其他任何内容都是错误. (2认同)