是否可以使用负值进行循环索引

时间:2016-06-17 18:46:34

标签: r for-loop indexing

我想在一系列值上运行for循环并执行简单的计算。例如,这里我有一个矢量x,范围从-10到10.我想计算x中小于给定值的值的数量。

x<-seq(-10,10,1)

nums<-vector()

for (i in x) { nums[i] <- length( which(x < i)) }

然而,编码此for循环仅对x中的正值进行索引并返回:

nums = 11 12 13 14 15 16 17 18 19 20

而不是我想看到的内容:

nums = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

3 个答案:

答案 0 :(得分:1)

您正在为矢量使用负索引,尝试类似:

nums <- NULL
for (i in x) {
    nums <- c(nums, length( which(x < i)))
}

或者:

nums <- NULL
for (i in x) {
    nums <- c(nums, sum(x < i))
}

实际上,更好的方法或更多R方法可以使用apply系列中的函数。

sapply(x, function(ele) sum(x < ele))
 [1]  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20

答案 1 :(得分:1)

R原则上旨在尽可能避免循环。除此之外,您的代码中还存在一些语法错误......

如果要沿向量循环,则需要使用i in seq_along(x)而不是i in x。解决问题的方法是直接索引向量

    for (i in seq_along(x)){ 
      nums[i] <- sum(x < x[i])
    }

编辑:您只对正值进行循环的原因是i in x开始按-10进行索引,以便将x与i进行比较,但不会将您的开始作为对齐nums[-10]而不是真的合适...

答案 2 :(得分:0)

这有效:

x<-seq(-10,10,1)

nums<-vector()

for (i in x){ nums[i+11] <- length( which(x < i)) }