我想在一系列值上运行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
答案 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))
}