R中的函数总和

时间:2014-12-07 11:41:57

标签: r

我在R中有一个函数,我希望用不同的值取这个函数的总和。但是,由于我有一个中断条件(由if语句创建),我不能明确地这样做:

F<- function(x) if(x<5) 1 else 0
sum(F(seq(1,10,1))
#[1] 1
#Warning message:
#In if (x < 5) 1 else 0 :
#  the condition has length > 1 and only the first element will be used

所以它试图执行函数的序列而不是序列的总和。我希望避免使用for循环,因为这会使长代码变得非常杂乱;特别是为了避免丑陋的嵌套for循环。

我该怎么做?

2 个答案:

答案 0 :(得分:5)

您可以使用Vectorize

F_v <- Vectorize(F)
sum(F_v(seq(1,10,1)))
# [1] 4

答案 1 :(得分:3)

如果您想避免使用for循环,那么sapply是您的选择,因为它更快。

sapply(seq(1,10,1), FUN <- function(x) {if(x<5) 1 else 0})