我想创建一个带有 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)
}
他们都没有工作。有人可以帮我纠正我的代码吗?
最佳答案
把它简化下来。取向量化逻辑运算的总和
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
关于r - 从某个范围内的列表中计算值的简单函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29977419/