R中的条件和 - 通过调用sum函数一次计算2个不同的和

时间:2015-03-16 06:09:12

标签: r

我想计算向量中小于10的数字之和,并计算R中出现的这些数字的数量。

为此,我写了以下代码:

sum = sum(numbers[which(numbers<=10)])
 count = sum(numbers<=10)

有没有办法合并这些陈述?而不是两次调用函数和?

2 个答案:

答案 0 :(得分:4)

这有点巴洛克式,但这只会调用sum(和which)一次并仍然使用该值两次:

numbers <- 10:1
mapply(do.call, c( function(x){sum(numbers[x])}, #first function
                   length),                      # count of numbers <5
                MoreArgs=list(list(which(numbers<5) )) )
#[1] 10  4

答案 1 :(得分:3)

您可以定义自己的功能:

sum_occ <- function(x) {c(sum = sum(x), occ = length(x))}

并将其应用于numbers[which(numbers <= 10)]。当您使用所需子集调用函数时,它会调用sum一次,length一次,当然还有which

示例

set.seed(123)
numbers <- sample(1:20, 20, replace=T)
> sum_occ(numbers[which(numbers <= 10)])
#sum occ 
# 52   9