我想计算向量中小于 10 的数字之和,并计算此类数字在 R 中的出现次数。
为此,我编写了以下代码:
sum = sum(numbers[which(numbers<=10)])
count = sum(numbers<=10)
有没有办法合并这些语句?而不是调用函数总和两次?
它有点巴洛克风格,但这只会调用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
您可以定义自己的函数:
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