在R中“循环”的有效方法

时间:2013-03-31 19:22:43

标签: r

我是R的新手,我遇到了这个问题。我知道我可以做一个循环,但我想看看是否有一个R-ic方法来做它。

我的数据框中的值为100到1000。我想生成一个表的值小于500,600,700,...,1000。

我知道该怎么做:

x = seq(100, 1000, by=10)
y = seq(500, 1000, by=100)
sum(x<y[1])

我需要做类似的事情:

sum(x<y)

将返回带有计数的向量。

我试图寻找类似的问题,但这是非常非特异性的,我找不到答案。

3 个答案:

答案 0 :(得分:3)

因为,您可以使用lapply为例。

unlist(lapply(y, function(i) sum(x<i)))

进行循环是R-idomatic方式。它基本上是一个循环但没有副作用。

修改

我更喜欢在这里使用table,并且在评论中建议使用R-ish sapply

sapply(y, function(i) table(x<i))
      [,1] [,2] [,3] [,4] [,5] [,6]
FALSE   51   41   31   21   11    1
TRUE    40   50   60   70   80   90

编辑

你也可以使用vapply,因为你按照@flodel的建议指定了retun的类型更安全:

 vapply(y, function(i) sum(x<i), integer(1L))

答案 1 :(得分:1)

试试这个

 sapply(y,FUN=function(iter) sum(x < iter))

答案 2 :(得分:1)

怎么样:

colSums(outer(x, y, '<'))
[1] 40 50 60 70 80 90