用curve()在R中绘制一个常数函数

Posted

技术标签:

【中文标题】用curve()在R中绘制一个常数函数【英文标题】:Plotting a constant function in R with curve() 【发布时间】:2015-03-11 02:43:12 【问题描述】:

所以我有一个错误...

f <- function(x)return(1)
curve(f(x),0,100,xname="x")

Error in curve(f(x), 0, 100, xname = "x") : 
'expr' did not evaluate to an object of length 'n'

考虑到这一点很奇怪

F <- function(x)return(0*x+1)
curve(F(x),0,100,xname="x")

工作得很好...这让我想到了 R 如何处理 data.frame()s。

a <- data.frame(1,2,3)
f(a)
# [1] 1
F(a)
#   X1 X2 X3
# 1  1  1  1

这意味着函数 Vectorize() 将解决我的问题。 无论如何,这是 R 做出的隐含决策的一个尖锐例子,这会导致不一致的行为。

【问题讨论】:

来自?curve: expr The name of a function, or a call or an expression written as a function of x which will evaluate to an object of the same length as x. 在您的第一个函数中,您不使用/评估x。如果你想返回一个常量,这个可以工作:f &lt;- function(x)x-x+1 这就是问题所在,如果没有强输入错误,可能会在您不希望出现时弹出。幸运的是 Ftyping 【参考方案1】:

问题是函数应该返回一个与参数长度相同的向量。在您的情况下,该函数始终返回一个向量而不是 n。解决方案可能是

 f <- function(x)return(rep(1,length(x)))

【讨论】:

我几乎可以肯定曲线将给定函数传递给数据帧。知道这一点的怪异几乎是有道理的。

以上是关于用curve()在R中绘制一个常数函数的主要内容,如果未能解决你的问题,请参考以下文章

R可视化绘制t分布(t Distribution)

R语言自定义变成进行决策曲线分析DCA曲线绘制(Decision Curve Analysis)

决策曲线(Decision Curve Analysis)的绘制(R语言)

do.call 和 curve 不能在另一个函数环境中绘制函数

R语言绘制函数/隐函数曲线

R中的线函数