r - 从某个范围内的列表中计算值的简单函数

标签 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)
}

他们都没有工作。有人可以帮我纠正我的代码吗?

最佳答案

把它简化下来。取向量化逻辑运算的总和

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/

相关文章:

r - 月数(9) 的算术结果为 NA

r - 如何在 R 中动态渲染按钮图标 Shiny

r - 计算向量在另一个向量中的出现次数

r - 多重插补的倾向得分匹配

r - 将 RGB RasterBrick 转换为灰度

r - 从列/列表中过滤尝试错误对象(dplyr,但也更通用)

在安装了 64 位 R 的 64 位操作系统上运行 32 位 RStudio

r - 使用 dplyr 有条件地替换列中的值

r - 使用facet_wrap()绘制列表的列表

R - c() 意外地将命名向量的名称转换为 UTF-8。这是一个错误吗?