Как создать самокопирующий вектор в R

Я думаю, что это очень легко, но мой R кунг-фу слаб. Я пытаюсь создать вектор сам по себе в совокупности. Этот код работает, но я бы хотел что-то более элегантное и автоматизированное. У меня есть миллионы строк, которые необходимо собрать.

a <- c(4,4,5,1,9)
a <- a[order(-a[])]
k <- a[1:length(a)]/sum(a)
w <- c(k[1],k[1]+k[2],k[1]+k[2]+k[3],k[1]+k[2]+k[3]+k[4],k[1]+k[2]+k[3]+k[4]+k[5])
w

Ответы на вопрос(2)

Бинг мой друг ... Я нашел функцию cumsum ().

 Dirk Eddelbuettel08 окт. 2010 г., 04:39
Если жареный твой бинг, тоrseek.org обязательно будет твой дядя ...
 datayoda08 окт. 2010 г., 19:35
отличный! спасибо за ссылку
Решение Вопроса

Ты имел ввидуcumsum() ?

> a <- c(4,4,5,1,9)
> a <- a[order(-a[])]            # just calling sort is shorter too
> k <- a[1:length(a)]/sum(a)     # long way  
> k 
[1] 0.391304 0.217391 0.173913 0.173913 0.043478
> k <- a/sum(a)                  # same, but shorter
> k  
[1] 0.391304 0.217391 0.173913 0.173913 0.043478
> ck <- cumsum(k) 
> ck  
[1] 0.39130 0.60870 0.78261 0.95652 1.00000 
>   

редактировать Я упустил еще одно упрощение:

> a <- c(4,4,5,1,9)
> ck <- cumsum( sort(a, decr=TRUE) / sum(as) ) 
> ck  
[1] 0.39130 0.60870 0.78261 0.95652 1.00000 
>   

Ты хочешьsort() здесь, а неorder() в сочетании с индексацией.

 datayoda08 окт. 2010 г., 05:20
спасибо что даже лучше
 hadley08 окт. 2010 г., 16:40
Или жеprop.table(cumsum(sort(a, decr=TRUE)))

Ваш ответ на вопрос