一个向量被另一个向量插值
interpolation of a vector by another vector
我有一个向量 "x"
我可以在 "n"
点上对它进行插值,比方说 20
x <- c(1,2,1,2,1,2,1)
n <- 20
ap <- approx(x,n = n)$y
结果我会得到这样的东西
"n"
是一个常数,问题是 - 我可以使用 "n"
作为 vector
n <- c(1:10,10:1)
得到这样的东西
或者也许还有其他方法可以做到这一点?
很抱歉提出这样一个不清楚的问题,但我不知道如何提出其他问题。
有两种方法可以解释您的问题。在您的示例中,矢量 x
应该是 y
因为只提供了一个矢量:
approx(x, n = n) # Your code
# $x
# [1] 1.000000 1.315789 1.631579 1.947368 2.263158 2.578947 2.894737 3.210526 3.526316 3.842105 4.157895 4.473684 4.789474 5.105263 5.421053 5.736842 6.052632 6.368421 6.684211
# [20] 7.000000
#
# $y
# [1] 1.000000 1.473684 1.947368 2.421053 2.828947 3.223684 3.618421 3.802632 3.881579 3.960526 4.039474 4.118421 4.197368 4.381579 4.776316 5.171053 5.578947 6.052632 6.526316
# [20] 7.000000
approx(x=1:7, y=x, n=n) # How approx() interpreted your code
# $x
# [1] 1.000000 1.315789 1.631579 1.947368 2.263158 2.578947 2.894737 3.210526 3.526316 3.842105 4.157895 4.473684 4.789474 5.105263 5.421053 5.736842 6.052632 6.368421 6.684211
# [20] 7.000000
#
# $y
# [1] 1.000000 1.473684 1.947368 2.421053 2.828947 3.223684 3.618421 3.802632 3.881579 3.960526 4.039474 4.118421 4.197368 4.381579 4.776316 5.171053 5.578947 6.052632 6.526316
# [20] 7.000000
如果你的问题是x
可以是不等间距的向量,答案是肯定的。您可以使用 x <- c(1, 2.5, 3.75, 4, 4.25, 5.5, 7)
和 y <- c(1, 2, 1, 2, 1, 2, 1)
.
如果您希望近似值的间距相等,但又想以不相等的间隔插入新值,答案仍然是肯定的,但您必须使用 approxfun
创建一个函数:
apxfun <- approxfun(c(1,2,1,2,1,2,1))
vec2 <- c(1, 1.5, 2.0, 2.5, 3.0, 3.2, 3.4, 3.6, 3.8, 3.95, 4.05, 4.2, 4.4, 4.6, 4.8, 5.0, 5.5, 6.0, 6.5, 7)
apxfun(vec2)
# [1] 1.00 1.50 2.00 1.50 1.00 1.20 1.40 1.60 1.80 1.95 1.95 1.80 1.60 1.40 1.20 1.00 1.50 2.00 1.50 1.00
也许您可以将 approxfun
与 rep
和 cumsum
结合使用以获得所需的输出:
x <- c(1,2,1,2,1,2,1)
n <- c(1:10,10:1)
i <- cumsum(c(0,rep(1/n, n)))
i <- i - min(i)
i <- 1 + i / max(i) * (length(x) - 1)
approxfun(x)(i)
我有一个向量 "x"
我可以在 "n"
点上对它进行插值,比方说 20
x <- c(1,2,1,2,1,2,1)
n <- 20
ap <- approx(x,n = n)$y
结果我会得到这样的东西
"n"
是一个常数,问题是 - 我可以使用 "n"
作为 vector
n <- c(1:10,10:1)
得到这样的东西
或者也许还有其他方法可以做到这一点?
很抱歉提出这样一个不清楚的问题,但我不知道如何提出其他问题。
有两种方法可以解释您的问题。在您的示例中,矢量 x
应该是 y
因为只提供了一个矢量:
approx(x, n = n) # Your code
# $x
# [1] 1.000000 1.315789 1.631579 1.947368 2.263158 2.578947 2.894737 3.210526 3.526316 3.842105 4.157895 4.473684 4.789474 5.105263 5.421053 5.736842 6.052632 6.368421 6.684211
# [20] 7.000000
#
# $y
# [1] 1.000000 1.473684 1.947368 2.421053 2.828947 3.223684 3.618421 3.802632 3.881579 3.960526 4.039474 4.118421 4.197368 4.381579 4.776316 5.171053 5.578947 6.052632 6.526316
# [20] 7.000000
approx(x=1:7, y=x, n=n) # How approx() interpreted your code
# $x
# [1] 1.000000 1.315789 1.631579 1.947368 2.263158 2.578947 2.894737 3.210526 3.526316 3.842105 4.157895 4.473684 4.789474 5.105263 5.421053 5.736842 6.052632 6.368421 6.684211
# [20] 7.000000
#
# $y
# [1] 1.000000 1.473684 1.947368 2.421053 2.828947 3.223684 3.618421 3.802632 3.881579 3.960526 4.039474 4.118421 4.197368 4.381579 4.776316 5.171053 5.578947 6.052632 6.526316
# [20] 7.000000
如果你的问题是x
可以是不等间距的向量,答案是肯定的。您可以使用 x <- c(1, 2.5, 3.75, 4, 4.25, 5.5, 7)
和 y <- c(1, 2, 1, 2, 1, 2, 1)
.
如果您希望近似值的间距相等,但又想以不相等的间隔插入新值,答案仍然是肯定的,但您必须使用 approxfun
创建一个函数:
apxfun <- approxfun(c(1,2,1,2,1,2,1))
vec2 <- c(1, 1.5, 2.0, 2.5, 3.0, 3.2, 3.4, 3.6, 3.8, 3.95, 4.05, 4.2, 4.4, 4.6, 4.8, 5.0, 5.5, 6.0, 6.5, 7)
apxfun(vec2)
# [1] 1.00 1.50 2.00 1.50 1.00 1.20 1.40 1.60 1.80 1.95 1.95 1.80 1.60 1.40 1.20 1.00 1.50 2.00 1.50 1.00
也许您可以将 approxfun
与 rep
和 cumsum
结合使用以获得所需的输出:
x <- c(1,2,1,2,1,2,1)
n <- c(1:10,10:1)
i <- cumsum(c(0,rep(1/n, n)))
i <- i - min(i)
i <- 1 + i / max(i) * (length(x) - 1)
approxfun(x)(i)