用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 <- function(x)x-x+1
。
这就是问题所在,如果没有强输入错误,可能会在您不希望出现时弹出。幸运的是 Ftyping
【参考方案1】:
问题是函数应该返回一个与参数长度相同的向量。在您的情况下,该函数始终返回一个向量而不是 n。解决方案可能是
f <- function(x)return(rep(1,length(x)))
【讨论】:
我几乎可以肯定曲线将给定函数传递给数据帧。知道这一点的怪异几乎是有道理的。以上是关于用curve()在R中绘制一个常数函数的主要内容,如果未能解决你的问题,请参考以下文章
R语言自定义变成进行决策曲线分析DCA曲线绘制(Decision Curve Analysis)
决策曲线(Decision Curve Analysis)的绘制(R语言)