Hi All,

I *think* it's ddply because the function recognizes vr1, etc, in other
parts of the function.

Here's some code:

# create dataset

PROV.PM.FBCTS <- c(0.00 ,0.00, 33205.19, 25994.56, 23351.37, 26959.56
,27632.58, 26076.24, 0.00,     0.00 , 6741.42, 18665.09 ,18129.59 ,21468.39
,21294.60 ,22764.82, 26076.73)
FBCTS.INV.TOT <- c(0 ,      0,  958612,  487990,  413344,  573347,  870307,
552681 ,      0, 0 , 163831 , 400161 , 353000,  358322 , 489969,  147379,
1022769)
FBCTS.REC.TOT <- c(0   ,    0, 1638818  ,297119 , 299436  ,414164 , 515735,
 529001   ,    0, 0 , 427341 , 625893  ,437854 , 407091,  425119 ,   8663,
      0)
MECH.NAME <- c("Mechanism A","Mechanism A","Mechanism A","Mechanism
A","Mechanism A","Mechanism A","Mechanism A","Mechanism A", "Mechanism
B","Mechanism B","Mechanism B","Mechanism B","Mechanism B","Mechanism
B","Mechanism B","Mechanism B","Mechanism B",)

vn <- data.frame(MECH.NAME, PROV.PM.FBCTS, FBCTS.INV.TOT, FBCTS.REC.TOT)


# create function

allocation <- function(vr1, vr2, vr3)
{

d <- ddply(vn, "MECH.NAME", summarise, SUM = vr1 + vr2 + vr3)

vn <- merge(vn, d, by.x="MECH.NAME", by.y="MECH.NAME", all=T)
new <- (vr1+vr2+vr3) / vn$SUM
return(new)

}

# run function

vn$PROV.PM.FBCTS <- allocation(PROV.PM.FBCTS, FBCTS.INV.TOT, FBCTS.REC.TOT)

Here's the error:

> vn$PROV.PM.FBCTS <- allocation(PROV.PM.FBCTS, FBCTS.INV.TOT,
FBCTS.REC.TOT)
Error in eval(expr, envir, enclos) : object 'vr1' not found


# If I pull the calculations out of the function it works:


d <- ddply(vn, "MECH.NAME", summarise, SUM = sum(PROV.PM.FBCTS,
FBCTS.INV.TOT, FBCTS.REC.TOT))
vn <- merge(vn, d, by.x="MECH.NAME", by.y="MECH.NAME", all=T)
vn$PROV.PM.FBCTS <- (PROV.PM.FBCTS +  FBCTS.INV.TOT + FBCTS.REC.TOT) /
vn$SUM


> vn
     MECH.NAME PROV.PM.FBCTS FBCTS.INV.TOT FBCTS.REC.TOT     SUM
1  Mechanism A    0.00000000             0             0 7713774
2  Mechanism A    0.00000000             0             0 7713774
3  Mechanism A    0.34103091        958612       1638818 7713774
4  Mechanism A    0.10515004        487990        297119 7713774
5  Mechanism A    0.09543077        413344        299436 7713774
6  Mechanism A    0.13151418        573347        414164 7713774
7  Mechanism A    0.18326628        870307        515735 7713774
8  Mechanism A    0.14360783        552681        529001 7713774
9  Mechanism B    0.00000000             0             0 5402533
10 Mechanism B    0.00000000             0             0 5402533
11 Mechanism B    0.11067280        163831        427341 5402533
12 Mechanism B    0.19337580        400161        625893 5402533
13 Mechanism B    0.14974155        353000        437854 5402533
14 Mechanism B    0.14565046        358322        407091 5402533
15 Mechanism B    0.17332290        489969        425119 5402533
16 Mechanism B    0.03309685        147379          8663 5402533
17 Mechanism B    0.19413964       1022769             0 5402533


Can anyone help me figure out why I can't put this calculation in a
function?  Is this a systemic thing I should look for in the future?

I know there are other ways to do what I want, but I am not very curious
about this.

Best,

Jen

	[[alternative HTML version deleted]]

