library(bezier)
t <- seq(0, 1, length=100)
p <- matrix(c(0.03,0.03,0, 0.335,0.6,0, 0.667,0.9,0, 1,1,0), nrow=4, ncol=3, byrow=TRUE)
bezier_points <- bezier(t=t, p=p[, 1:2])
getybezier <- function(x, bezpointsdf)
{
ind <- min(which(bezpointsdf[,1] > x))
return(bezier_points[ind,2])
}
getybezier(0.45, bezier_points)
test <- c(0.031, 0.45, 0.65)
getybezier(test, bezier_points)
getybezier(0.45,bezier_points) [1] 0.6358359 测试&lt; - c(0.031,0.45,0.65) getybezier(test,bezier_points) [1] 0.03205104 警告信息: 在bezpointsdf [,1]&gt; X : 较长的物体长度不是较短物体长度的倍数
有没有办法可以删除此警告消息?它给了我错误的答案。我知道它之所以这样做的原因。但是,我不知道如何纠正这个问题。有人可以帮忙吗?
答案 0 :(得分:0)
它返回错误的原因是该函数不知道如何为您定义的函数中的x参数处理长于1的对象,这在性能方面是最佳的。您可以使用apply
系列函数完成在多个测试值上运行此函数。
如果您希望输出位于列表中,可以使用lapply()
:
lapply(test, getybezier, bezpointsdf = bezier_points)
给你:
> lapply(test, getybezier, bezpointsdf = bezier_points)
[[1]]
[1] 0.04719015
[[2]]
[1] 0.6361454
[[3]]
[1] 0.8233659
或者,如果您想在矢量中输出,可以使用sapply()
:
sapply(test, getybezier, bezpointsdf = bezier_points)
给你:
> sapply(test, getybezier, bezpointsdf = bezier_points)
[1] 0.04719015 0.63614540 0.82336591