我想计算向量中小于10的数字之和,并计算R中出现的这些数字的数量。
为此,我写了以下代码:
sum = sum(numbers[which(numbers<=10)])
count = sum(numbers<=10)
有没有办法合并这些陈述?而不是两次调用函数和?
答案 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