2016-11-13 26 views
-2

我有一个向量。总和不使用循环在R

basket <- c(4,5,10,102,10); 

如果我来总结,我可以打电话给

sum(basket) 

如果我用for循环找出总和,

total <- 0; len <- length(basket); for(i in 1:len) {total <- total + basket[i]} 

有没有一种方法,我可以找到总数,而不使用sum(),或使用这个冗长的循环结构?

+0

只是好奇 - 为什么你不想用sum ? –

+0

了解是否有更好/更快的做事;特别是了解更多关于矢量化的内容,因为我习惯于“for/while”循环... –

+0

但是sum = + ...我没有明白。循环也不是矢量化操作。例如“+”是矢量化的。 – Sotos

回答

1
add <- function(x) Reduce("+", x) 
add(basket) 

或写一个较短的循环:

s <- 0 
for(a in basket) s<- s+a 
+0

感谢您的新功能!我需要摆脱这种循环索引的习惯...... :) –

+0

在使用循环时,分配给“s”将返回NULL。所以第二行应该是“for(a in basket)s

+0

没错。确认编辑 –

1

sum,其中汇总了一个向量的元素和Reduce,它将一个函数应用于向量的元素,使得一种运行状态在每次调用时被保留和修改,然后作为结果返回。

(不幸的是,我不中的R程序,所以我不能告诉你如何使用它们,但这些都是在现代语言常用功能。)

2

在R中求和真的很快。这种基本操作不需要使用for循环。 你可以在这里找到一个C++循环,R循环和R sum函数之间的小基准:http://adv-r.had.co.nz/Rcpp.html(参见“矢量输入,标量输出”部分)

+0

谢谢!其实,我只是想了解更多关于R的知识,特别是矢量化,循环以及应用函数的不同方式。所以只是尽量推动:) –