R 中的曲线:'expr' 必须是函数、调用或包含 'x' 的表达式

问题描述 投票:0回答:2

我收到绘制曲线错误:

rho<-function(t,k) ifelse(abs(t)<=k,t^2,(2*k*abs(t))-k^2)
plot(farm~land,data=farmland)
curve(rho(k=19000),xlim=c(-10,10),col="blue", add="TRUE")

Error in curve(rho(k = 19000), xlim = c(-10, 10), col = "blue", add = "TRUE") : 
  'expr' must be a function, or a call or an expression containing 'x'

我该如何解决?

r plot
2个回答
3
投票

你可以试试这个:

rho <- function(x, k = 19000) ifelse(abs(x) <= k, x^2, (2 * k * abs(x)) - k^2)
plot(farm ~ land, data = farmland)
curve(rho, from = -10, to = 10, col = "blue", add = TRUE)

请注意,我在您的代码中添加了一些空格,这样更容易阅读。另外,

add
参数 采用逻辑值(TRUE 或 FALSE),而不是字符向量(“TRUE”可能会计算为 TRUE,但永远不要指望这一点)。

另一种选择是使用

lines
:

plot(farm ~ land, data = farmland)
x = seq(-10, 10, by = 0.01)
lines(x, rho(x, k = 19000), col = 'blue')

0
投票

您可以谨慎使用就地柯里化,但请记住,

curve()
需要一个已经在“外部”定义的函数,或者带有符号
x
的表达式。看起来有点像外星人代码,但这是一个(有点人为的)示例。

hist(rexp(10^4), prob = TRUE, breaks = "FD")

g <- function(x, k) ifelse(x <= 1, x^k, x^-k)

curve({\(.) g(., k = 2)}(x), col = "blue", lwd = 2, add = TRUE)
© www.soinside.com 2019 - 2024. All rights reserved.