A few comments in-line below

On 8/7/2012 1:53 PM, Jennifer Sabatier wrote:
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",)

Line breaks have messed up this data and there is an extra comma at the end of MECH.NAME

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

It is easier to just give the final object. See the output of dump("vn", file="")

# create function

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

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

ddply is looking for a column named vr1 (etc.), not a column whose name is that of the character value of the variable vr1. There is not a straightforward way to do this with summarise, but you can use something like

function(DF) {
    data.frame(SUM = DF[[vr1]] + DF[[vr2]] + DF[[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))

Note that sum(a,b) is not the same as a+b.

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




--
Brian S. Diggs, PhD
Senior Research Associate, Department of Surgery
Oregon Health & Science University

______________________________________________
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.

Reply via email to