我是R的新手,所以解决方案可能相对简单。我有以下功能来计算普通汽车的停车距离:
distance <- function(mph){(2.0*(mph/60))+(0.062673*(mph^1.9862))}
我正在绘制从1英里/小时到60英里/小时的所有停车距离:
range = distance(1:60)
但是我需要标记停止距离等于120英尺的地方。我不知道在R中如何做到这一点,但是我想写一个函数,其中,对于一个停止距离(x),我在MPH中获得了最高车速。我应该使用什么函数,是否有一种简单的方法来检查distance(x)的值(如上所述)是否等于某个值?
答案 0 :(得分:4)
一种方法是找到函数-120何时等于0:
distance <- function(mph, dist=0){(2.0*(mph/60))+(0.062673*(mph^1.9862))-dist}
uniroot(distance, c(1, 60), dist=120)
## $root
## [1] 44.63998
##
## $f.root
## [1] -5.088982e-06
##
## $iter
## [1] 6
##
## $estim.prec
## [1] 6.103516e-05
看看它是否奏效:
distance(44.63998)
## [1] 120
答案 1 :(得分:2)
我知道这是一个老问题并且有一个公认的答案,但我想指出另一种方法来实现这一点 - 创建反函数。由于您拥有该功能,因此很容易在合理范围内生成许多 x-y 点。然后简单地通过使 y 成为 x 的函数来创建反函数。在您的示例中,
x = seq(0,150,0.05)
y = distance(x)
speed = approxfun(y,x)
现在让我们确认它给出了很好的答案:
speed(120)
[1] 44.63998
distance(speed(120))
[1] 120