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)) ) )
[1] TRUE
--
David.
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@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@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.