简单函数计算特定范围内的列表中的值

时间:2015-04-30 20:41:48

标签: r

我想创建一个带3个参数的函数:值列表和两个截止值(高和低)。然后我希望列表中有多少值在两个截止值的范围内。

到目前为止,我已经尝试过:

count <- function(y, x1, x2){
  tmp1 <- length(y)
  tmp2 <- length(y>x1)
  tmp3 <- length(tmp2<=x2)
  return(tmp3)
}

count <- function(y, x1, x2){
  results <- list()
  for (i in y) {
    if(y > x1 & y <= x2) {
      results <- results+1
    }
  }
  return(results)
}

它们都不起作用。有人可以帮我纠正我的代码吗?

1 个答案:

答案 0 :(得分:5)

简化它。取矢量化逻辑运算的总和

f <- function(x, y, z) sum(x > y & x < z)
f(1:10, 3, 7)
# [1] 3

但是data.table作者比你领先一步。他们写了一个函数between()。我相信dplyr包中也有一个。

library(data.table)
between
# function (x, lower, upper, incbounds = TRUE) 
# {
#     if (incbounds) 
#         x >= lower & x <= upper
#     else x > lower & x < upper
# }
# <bytecode: 0x44fc790>
# <environment: namespace:data.table>

因此,对于与上述相同的结果,您只需执行

即可
sum(between(1:10, 3, 7, FALSE))
# [1] 3