[R] apply/return and reuse
Mark Knecht
markknecht at gmail.com
Sat Jul 18 21:59:52 CEST 2009
Hi Gabor,
Thanks for the pointer to Reduce. It looks quite interesting. I
made an attempt to use it but I'm not clear how I would move the
output of the Reduce execution on row 1 to become the Initial value on
Row 2. In this output:
> MyDF
Event Initial Offset Final
1 1 10000 -31 9969
2 2 0 10 10
3 3 0 -133 -133
4 4 0 -91 -91
5 5 0 -145 -145
6 6 0 74 74
7 7 0 4 4
8 8 0 19 19
9 9 0 -120 -120
10 10 0 47 47
>
It seems that the intended use of Reduce is for when I have all the
values previously set up in the array and then want to execute the
same commands down through the array. That is very powerful and makes
sense in most cases, but in my case I have to calculate the values on
a line-by-line basis where the execution of Reduce on row 1 (the 9969)
must become the Initial value on row 2 before Reduce it's work on row
2.
I think I'm not fully grasping your intentions here.
Code follows.
Thanks,
Mark
InitialValue = 10000
MyDF = data.frame(cbind(Event = 1:10, Initial = 0, Offset = 0 , Final = 0))
MyDF$Offset = round(100*rnorm(10), 0)
MyDF$Initial[1] = InitialCash
MyDF
AddPL = function(x) Reduce("+", x[2:3])
MyDF$Final = AddPL(MyDF)
MyDF
On Fri, Jul 17, 2009 at 9:02 PM, Gabor
Grothendieck<ggrothendieck at gmail.com> wrote:
> See ?Reduce
>
> On Fri, Jul 17, 2009 at 11:10 PM, Mark Knecht<markknecht at gmail.com> wrote:
>> Hi,
>> Is it possible to make something like the following code actually
>> work? My goal in this example would be that I'd see results like
>>
>> 1 10000 10100
>> 2 10100 10200
>> 3 10200 10300
>> 4 10300 10400
>>
>> In real usage the function would obviously do a lot more work, but the
>> question I cannot answer myself yet is whether the apply can return a
>> value from the work on one row and then use that value as the input to
>> the function for the next row?
>>
>> Thanks,
>> Mark
>>
>>
>> ReturnLast = function (.row, NextInitial=100) {
>> .row$Initial = as.numeric(NextInitial)
>> .row$Final = as.numeric(.row$Initial+100)
>> }
>>
>> MyStart = 10000
>> X = data.frame(cbind(Event = 1:10, Initial = 0, Final = 0))
>>
>> X
>>
>> MyStart = apply(X, 1, ReturnLast( X, MyStart))
>>
>> X
>>
>> ______________________________________________
>> 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.
>>
>
More information about the R-help
mailing list