From: David Winsemius <dwinsemius_at_comcast.net>

Date: Mon, 07 Mar 2011 11:52:26 -0500

[1] 0 1 -6 -5 -4 0 1 0 1 -4 3 -5 -5 1 -3 > c(0, cumsum(diff(theoP)) )

[1] 0 1 -6 -5 -4 0 1 0 1 -4 3 -5 -5 1 -3 > all.equal(d, c(0, cumsum(diff(theoP)) ) )**[1] TRUE
**

Date: Mon, 07 Mar 2011 11:52:26 -0500

On Mar 7, 2011, at 11:12 AM, rivercode wrote:

*>
*

> Hope this clarifies my Q.

*>
**> Creating a vector where each element is (except the first which is
**> 0) is:
**> the previous element + a calculation from another vector theoP[i] -
**> theoP[i-1]
**>
**> I could not figure out how to do this without a for loop, as the
**> vector had
**> to reference itself for the next element...I am missing something
**> obvious,
**> but not too sure what.
**>
**> d = vector(mode = "numeric", length= len)
**> d[1] = 0
**> if (len>1) for (i in 2:len) { d[i] = d[i-1] + theoP[i] - theoP[i-1] }
*

so why not:

c(0, cumsum(diff(theoP)) )

> theoP <- sample(1:10, 15, replace=TRUE); len=length(theoP); d = vector(mode = "numeric", length= len)

> d[1] = 0 > if (len>1) for (i in 2:len) { d[i] = d[i-1] + theoP[i] - theoP[i-1] } > > d

[1] 0 1 -6 -5 -4 0 1 0 1 -4 3 -5 -5 1 -3 > c(0, cumsum(diff(theoP)) )

[1] 0 1 -6 -5 -4 0 1 0 1 -4 3 -5 -5 1 -3 > all.equal(d, c(0, cumsum(diff(theoP)) ) )

-- David.Received on Mon 07 Mar 2011 - 16:54:22 GMT

>

> Thanks,

> Chris>>> Hi,>>>> I am missing something obvious.>>>> Need to create vector as:>>>> (0, i-1 + TheoP(i) - TheoP(i-1), repeat....) Where i is the index>> position>> in the vector and i[1] is always 0.>> I think your prototype is not agreeing with the code below. Is "i"> suppose to be the index (as suggested above) or the prior term (as> implied below)?>>>> Found myself having to use a For Loop because I could not get sapply>> working. Any suggestions ?>> Assuming the code below, you construct the first three or four values> by hand I think you will find that the intermediate values of TheoP> will have alternating signs.>> term2 = 2-1 + TheoP(2) - TheoP(1)> term3 = 3-1 + TheoP(3) - (2-1 + TheoP(2) - TheoP(1))> term4 = 4-1 + TheoP(4) - (3-1 + TheoP(3) - (2-1 + TheoP(2) -> TheoP(1)) )>> The answer to the first question will determine how you proceed. If> the index is being used then there are two series of cumulative sums> and perhaps you can construct an expression that can be fed to the> cumsum function.>> The diff function is also available and if the index version is> correct, then it might even be as simple as c(0,> ((1:len)-1)+diff(TheoP) )>> So clarify what is intended.> --> David.>>>>> delta <- function(x) {>>>> start = index[x]>> end = index[x+1] - 1>> iTheo = start:end>> len = length(iTheo)>> theoP = as.numeric(TheoBA$Bid[iTheo])>> d = vector(mode = "numeric", length= len)>> d[1] = 0>> if (len>1) for (i in 2:len) { d[i] = d[i-1] + theoP[i] - theoP[i-1] }>> return(d)>> }>>>> Thanks,>> Chris>>>> -->>>> --> View this message in context:http://r.789695.n4.nabble.com/Replace-for-loop-when-vector-calling-itself-tp3338383p3339351.html> Sent from the R help mailing list archive at Nabble.com.>> ______________________________________________> R-help_at_r-project.org mailing list> https://stat.ethz.ch/mailman/listinfo/r-help> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html> and provide commented, minimal, self-contained, reproducible code.

David Winsemius, MD West Hartford, CT ______________________________________________ R-help_at_r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.

Archive maintained by Robert King, hosted by
the discipline of
statistics at the
University of Newcastle,
Australia.

Archive generated by hypermail 2.2.0, at Mon 07 Mar 2011 - 17:40:20 GMT.

*
Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help.
Please read the posting
guide before posting to the list.
*