¿Cómo puedo usar ddply con variables variables?

Uso ddply para resumir algunasdata.frameby varias categorías, como esta:

# with both group and size being factors / categorical
split.df <- ddply(mydata,.(group,size),summarize,
                  sumGroupSize = sum(someValue))

Esto funciona sin problemas, pero a menudo me gusta calcular proporciones, lo que implica que necesito dividir por el total del grupo. ¿Cómo puedo calcular tal total dentro de la mismaddply ¿llamada

Digamos que me gustaría tener el porcentaje de observaciones en el grupo A que están en la clase de tamaño 1. Obviamente, primero tengo que calcular la suma de todas las observaciones en la clase de tamaño 1. Claro que podría hacer esto con dos llamadas ddply, pero usar todas las llamadas sería más cómodo. ¿Hay una manera de hacerlo

EDIT: no quise preguntar demasiado específico, pero me doy cuenta de que estaba molestando a la gente aquí. Así que aquí está mi problema específico. De hecho, tengo un ejemplo que funciona, pero no lo considero realmente ingenioso. Además, tiene una deficiencia que necesito superar: no funciona correctamente con apply.

library(plyr)

# make the dataset more "realistic"
mydata <- warpbreaks
names(mydata) <- c("someValue","group","size")
mydata$category <- c(1,2,3)
mydata$categoryA <- c("A","A","X","X","Z","Z")
# add some NA
mydata$category[c(8,10,19)] <- NA
mydata$categoryA[c(14,1,20)] <- NA


# someValue is summarized !
# note we have a another, varying category hence we need the a parameter
calcShares <- function(a, data) {
# !is.na needs to be specific!
tempres1 <- eval(substitute(ddply(data[!is.na(a),],.(group,size,a),summarize,
                sumTest = sum(someValue,na.rm=T))),

                envir=data, enclos=parent.frame())
tempres2 <- eval(substitute(ddply(data[!is.na(a),],.(group,size),summarize,
                sumTestTotal = sum(someValue,na.rm=T))),
                envir=data, enclos=parent.frame())

res <- merge(tempres1,tempres2,by=c("group","size"))
res$share <- res$sumTest/res$sumTestTotal
 return(res)

}

test <- calcShares(category,mydata)
test2 <- calcShares(categoryA,mydata)   
head(test)
head(test2)

Como puede ver, tengo la intención de ejecutar esto en diferentes variables categóricas. En el ejemplo, solo tengo dos (categoría, categoría A) pero, de hecho, obtuve más, por lo que usar aplicar con mi función sería realmente bueno, pero de alguna manera no funciona correctamente.

applytest <- head(apply(mydata[grep("^cat",
             names(mydata),value=T)],2,calcShares,data=mydata))   

.. devuelve un mensaje de advertencia y un nombre extraño (newX [, i]) para la categoría var.

Entonces, ¿cómo puedo hacer ESTO a) más elegante yb) solucionar el problema de la aplicación?

Respuestas a la pregunta(2)

Su respuesta a la pregunta