2016-11-13 1 views
-2

私はベクトルを持っています。ループを使用しないことの合計R

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

私は合計した場合、私は私が合計を見つけるためにforループを使用した場合、

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

は、私ができる方法はあり

sum(basket) 

を呼び出すことができますsum()を使用せずにtotalを見つけたり、この長いforループ構造を使用したりしますか?

+0

ちょっと好奇心旺盛? –

+0

物事をより良く/より速く行うことができるかどうかを知ること。特に私は "for/while"ループに慣れているので、ベクトル化についてもっと学びます... –

+0

しかし、合計= + ...私はそれを得ません。また、ループはベクトル化アクションではありません。 '+'は例えばベクトル化されています。 – Sotos

答えて

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

または短いループ書き込み:

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

新しい機能をお寄せいただきありがとうございます!私はインデックスを使ってループするこの習慣から抜け出す必要があります: –

+0

ループを使用する際に、 "s"に代入するとNULLが返されます。だから2行目はちょうど "(バスケットで)s

+0

。編集を確定しました –

1

ベクトルの要素を合計するsumと、ベクトルの要素に関数を適用して、各呼び出しで一種の実行状態が保持され、結果として返されるようにするReduceがあります。

(。残念ながら、私はRでプログラムをしませんので、私はそれらを使用する方法を伝えることはできませんが、これらは現代の言語で共通の機能です)

2

Rの合計は本当に速いです。このような基本的な操作のためにforループを使用する必要はありません。 C++ループ、Rループ、Rサム関数の小さなベンチマークがあります:http://adv-r.had.co.nz/Rcpp.html(ベクトル入力、スカラー出力を参照してください)

+0

ありがとう!実際には、私はRの詳細、特にベクトル化、ループ、関数を適用するさまざまな方法について学びたいだけです。だからできるだけ多くをプッシュしようとしています:) –

関連する問題