2016-11-13 72 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的知識,特別是矢量化,循環以及應用函數的不同方式。所以只是儘量推動:) –