假设我有一个长度为 5 的向量。内容可以是任何内容。
> v1 <- c(0,0,0,0,0)
> length(v1)
[1] 5
假设我想创建相同长度的向量,其平均分布的值范围从 0 到 100,如下所示:
> v2 <- c(0,25,50,75,100)
> length(v2)
[1] 5
这个例子非常简单,但现在我想编写一个函数,允许我对任意长度的向量执行此操作。这是我写的代码:
percentile <- function(N) {
l <- length(N)
v <- 0
i = 0
while (as.integer(i) < 100) {
i = i + 100/(l - 1)
v <- c(v, i)
}
v
}
如果我在上面描述的向量 v1 上尝试它,结果如预期:
> percentile(v1)
[1] 0 25 50 75 100
但是,对于更“复杂”的长度,事情会变得很奇怪,例如,如果我在长度为 1357 的向量 v3 上尝试它:
> v3 <- c(1:1357)
> length(v3)
[1] 1357
>
> length(percentile(v3))
[1] 1358
首先,在某些情况下,预期结果向量太长。根据初始向量的长度,它的长度可以超过一个或两个元素。这似乎并不取决于数字有多大。在这些情况下, percentile() 向量的最后一个元素总是大于 100:
> percentile(v3)
[1] 0.00000000 0.7374631 0.14749263 0.22123894 0.29498525
.......
[1356] 99.92625369 100.0000000 100.07374631
我对浮点数/整数的处理是否有问题?如何改进我的功能,使其适用于任何长度的向量?任何帮助表示赞赏。