我想创建一个带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)
}
它们都不起作用。有人可以帮我纠正我的代码吗?
答案 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